home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 2 / Gekikoh Dennoh Club Vol. 2 (Japan).7z / Gekikoh Dennoh Club Vol. 2 (Japan) (Track 01).bin / fsw / zm302 / zm302_l.lzh / MUSICZ.HAS < prev    next >
Text File  |  1997-02-25  |  102KB  |  4,805 lines

  1. *        ZMUSIC.X Version 3.0用 外部関数
  2. *
  3. *        MUSICZ.FNC Version 3.00
  4. *
  5. *    参考文献    MUSIC.FNC    SHARP
  6. *            MUSIC2.FNC    SAN M.S.
  7.  
  8.     .include    doscall.mac
  9.     .include    iocscall.mac
  10.     .include    zmcall.mac
  11.     .include    z_global.mac
  12.     .include    version.mac
  13.     .include    zmid.mac
  14.     .include    fdef.h
  15.     .cpu    68000
  16.  
  17. val:        equ    6
  18. dim1:        equ    8
  19. dim2:        equ    10
  20. dim1_data:    equ    10
  21. dim2_data:    equ    16
  22. next_par:    equ    10
  23. no_english:    equ    -1    *英語のメッセージはいらない
  24. ary1_ic:    equ    ary1_i.or.ary1_c
  25.  
  26. zms_buffer_default_size:    equ    65536
  27. fn_size:    equ    92    *1ファイルネームバッファの大きさ
  28.  
  29. Z_MUSIC    macro    func        *ドライバへのファンクションコール
  30.     move.l    func,d0
  31.     trap    #3
  32.     endm
  33.  
  34. information_table:
  35.     dc.l    init
  36.     dc.l    run
  37.     dc.l    end
  38.     dc.l    system
  39.     dc.l    break
  40.     dc.l    ctrl_d
  41.     dc.l    yobi
  42.     dc.l    yobi
  43.     dc.l    token_table
  44.     dc.l    parameter
  45.     dc.l    exec_address
  46.     dcb.b    20,0
  47.  
  48. token_table:
  49.     dc.b    'm_alloc',0
  50.     dc.b    'm_assign',0
  51.     dc.b    'm_assign2',0
  52.     dc.b    'm_vget',0
  53.     dc.b    'm_vset',0
  54.     dc.b    'm_fmvset',0
  55.     dc.b    'm_tempo',0
  56.     dc.b    'm_trk',0
  57.     dc.b    'm_trk2',0
  58.     dc.b    'm_play',0
  59.     dc.b    'm_stop',0
  60.     dc.b    'm_cont',0
  61.     dc.b    'm_stat',0
  62.     dc.b    'm_init',0
  63.     dc.b    'm_atoi',0
  64.     dc.b    'm_ch',0
  65.     dc.b    'm_pcmset',0
  66.     dc.b    'm_pcmplay',0
  67.     dc.b    'm_rec',0
  68.     dc.b    'm_rstop',0
  69.     dc.b    'm_save',0
  70.     dc.b    'm_trans',0
  71.     dc.b    'm_inp',0
  72.     dc.b    'm_out',0
  73.     dc.b    'm_dirout',0
  74.     dc.b    'm_exc',0
  75.     dc.b    'm_roland',0
  76.     dc.b    'm_total',0
  77.     dc.b    'm_fadeout',0
  78.     dc.b    'm_pcmcnf',0
  79.     dc.b    'm_adpcm_block',0
  80.     dc.b    'm_switch',0
  81.     dc.b    'm_print',0
  82.     dc.b    'm_detect',0
  83.     dc.b    'sc55_init',0
  84.     dc.b    'sc55_v_reserve',0
  85.     dc.b    'sc55_reverb',0
  86.     dc.b    'sc55_chorus',0
  87.     dc.b    'sc55_part_setup',0
  88.     dc.b    'sc55_part_parameter',0
  89.     dc.b    'sc55_drum_setup',0
  90.     dc.b    'sc55_drum_parameter',0
  91.     dc.b    'sc55_print',0
  92.     dc.b    'sc55_display',0
  93.     dc.b    'mt32_init',0
  94.     dc.b    'mt32_p_reserve',0
  95.     dc.b    'mt32_reverb',0
  96.     dc.b    'mt32_part_setup',0
  97.     dc.b    'mt32_drum_setup',0
  98.     dc.b    'mt32_common',0
  99.     dc.b    'mt32_patch',0
  100.     dc.b    'mt32_partial',0
  101.     dc.b    'mt32_print',0
  102.     dc.b    'u220_setup',0
  103.     dc.b    'u220_part_setup',0
  104.     dc.b    'u220_common',0
  105.     dc.b    'u220_timbre',0
  106.     dc.b    'u220_drum_setup',0
  107.     dc.b    'u220_drum_inst',0
  108.     dc.b    'u220_print',0
  109.     dc.b    'm1_midi_ch',0
  110.     dc.b    'm1_part_setup',0
  111.     dc.b    'm1_effect_setup',0
  112.     dc.b    'm1_print',0
  113.     dc.b    'send_to_m1',0
  114.     dc.b    'zmd_play',0
  115.     dc.b    'm_debug',0
  116.     dc.b    'm_count',0
  117.     dc.b    'fm_master',0
  118.     dc.b    'm_mute',0
  119.     dc.b    'm_solo',0
  120.     dc.b    'm_wave_form',0
  121.     dc.b    'adpcm_to_pcm',0
  122.     dc.b    'pcm_to_adpcm',0
  123.     dc.b    'exec_zms',0
  124.     dc.b    'zm_ver',0
  125. *V3系
  126.     dc.b    'zm_detect',0
  127.     dc.b    'zm_switch',0
  128.     dc.b    'zm_work',0
  129.     dc.b    'zm_assign',0
  130.     dc.b    'zm_vget',0
  131.     dc.b    'zm_vset',0
  132.     dc.b    'zm_tempo',0
  133.     dc.b    'zm_play',0
  134.     dc.b    'zm_play_again',0
  135.     dc.b    'zm_play_all',0
  136.     dc.b    'zm_play2',0
  137.     dc.b    'zm_stop',0
  138.     dc.b    'zm_stop_all',0
  139.     dc.b    'zm_cont',0
  140.     dc.b    'zm_cont_all',0
  141.     dc.b    'zm_play_status_all_ch',0
  142.     dc.b    'zm_play_status_all_tr',0
  143.     dc.b    'zm_play_status_ch',0
  144.     dc.b    'zm_play_status_tr',0
  145.     dc.b    'zm_init',0
  146.     dc.b    'zm_atoi',0
  147.     dc.b    'zm_check_zmsc',0
  148.     dc.b    'zm_set_timer_value',0
  149.     dc.b    'zm_set_master_clock',0
  150.     dc.b    'zm_play_zmd',0
  151.     dc.b    'zm_play_zmd_se',0
  152.     dc.b    'zm_se_play',0
  153.     dc.b    'zm_se_adpcm1',0
  154.     dc.b    'zm_se_adpcm2',0
  155.     dc.b    'zm_intercept_play',0
  156.     dc.b    'zm_current_midi_in',0
  157.     dc.b    'zm_current_midi_out',0
  158.     dc.b    'zm_midi_transmission',0
  159.     dc.b    'zm_exclusive',0
  160.     dc.b    'zm_set_eox_wait',0
  161.     dc.b    'zm_midi_inp1',0
  162.     dc.b    'zm_midi_out1',0
  163.     dc.b    'zm_midi_rec',0
  164.     dc.b    'zm_midi_rec_end',0
  165.     dc.b    'zm_gs_reset',0
  166.     dc.b    'zm_gs_partial_reserve',0
  167.     dc.b    'zm_gs_reverb',0
  168.     dc.b    'zm_gs_chorus',0
  169.     dc.b    'zm_gs_part_setup',0
  170.     dc.b    'zm_gs_part_parameter',0
  171.     dc.b    'zm_gs_drum_setup',0
  172.     dc.b    'zm_gs_drum_parameter',0
  173.     dc.b    'zm_gs_drum_name',0
  174.     dc.b    'zm_gs_print',0
  175.     dc.b    'zm_gs_display',0
  176.     dc.b    'zm_gm_system_on',0
  177.     dc.b    'zm_sc88_mode_set',0
  178.     dc.b    'zm_sc88_reverb',0
  179.     dc.b    'zm_sc88_chorus',0
  180.     dc.b    'zm_sc88_delay',0
  181.     dc.b    'zm_sc88_equalizer',0
  182.     dc.b    'zm_sc88_part_setup',0
  183.     dc.b    'zm_sc88_part_parameter',0
  184.     dc.b    'zm_sc88_drum_setup',0
  185.     dc.b    'zm_sc88_drum_parameter',0
  186.     dc.b    'zm_sc88_drum_name',0
  187.     dc.b    'zm_sc88_user_inst',0
  188.     dc.b    'zm_sc88_user_drum',0
  189.     dc.b    'zm_mt32_reset',0
  190.     dc.b    'zm_mt32_partial_reserve',0
  191.     dc.b    'zm_mt32_reverb',0
  192.     dc.b    'zm_mt32_part_setup',0
  193.     dc.b    'zm_mt32_drum',0
  194.     dc.b    'zm_mt32_common',0
  195.     dc.b    'zm_mt32_partial',0
  196.     dc.b    'zm_mt32_patch',0
  197.     dc.b    'zm_mt32_print',0
  198.     dc.b    'zm_u220_setup',0
  199.     dc.b    'zm_u220_part_setup',0
  200.     dc.b    'zm_u220_common',0
  201.     dc.b    'zm_u220_timbre',0
  202.     dc.b    'zm_u220_drums_setup',0
  203.     dc.b    'zm_u220_drums_inst',0
  204.     dc.b    'zm_u220_print',0
  205.     dc.b    'zm_m1_setup',0
  206.     dc.b    'zm_m1_part_setup',0
  207.     dc.b    'zm_m1_effect_setup',0
  208.     dc.b    'zm_m1_print',0
  209.     dc.b    'zm_send_to_m1',0
  210.     dc.b    'zm_pcm_read',0
  211.     dc.b    'zm_pcm_erase',0
  212.     dc.b    'zm_register_zpd',0
  213.     dc.b    'zm_set_zpd_table',0
  214.     dc.b    'zm_exec_subfile',0
  215.     dc.b    'zm_transmit_midi_dump',0
  216.     dc.b    'zm_set_wave_form1',0
  217.     dc.b    'zm_set_wave_form2',0
  218.     dc.b    'zm_obtain_events',0
  219.     dc.b    'zm_loop_control',0
  220.     dc.b    'zm_mask_tracks',0
  221.     dc.b    'zm_mask_all_tracks',0
  222.     dc.b    'zm_solo_track',0
  223.     dc.b    'zm_mask_channels',0
  224.     dc.b    'zm_mask_all_channels',0
  225.     dc.b    'zm_solo_channel',0
  226.     dc.b    'zm_set_ch_output_level',0
  227.     dc.b    'zm_set_tr_output_level',0
  228.     dc.b    'zm_master_fader',0
  229.     dc.b    'zm_get_fader_status',0
  230.     dc.b    'zm_get_play_time',0
  231.     dc.b    'zm_get_1st_comment',0
  232.     dc.b    'zm_get_timer_mode',0
  233.     dc.b    'zm_get_track_table',0
  234.     dc.b    'zm_get_track_table_se',0
  235.     dc.b    'zm_get_play_work',0
  236.     dc.b    'zm_get_play_work_se',0
  237.     dc.b    'zm_get_buffer_information',0
  238.     dc.b    'zm_zmsc_status',0
  239.     dc.b    'zm_calc_total',0
  240.     dc.b    'zm_occupy_zmusic',0
  241.     dc.b    'zm_occupy_compiler',0
  242.     dc.b    'zm_store_error',0
  243.     dc.b    'zm_print_error',0
  244.     dc.b    'zm_get_mem',0
  245.     dc.b    'zm_enlarge_mem',0
  246.     dc.b    'zm_free_mem',0
  247.     dc.b    'zm_free_mem2',0
  248.     dc.b    'zm_exchange_memid',0
  249.     dc.b    'zm_init_all',0
  250.     dc.b    'zm_int_start',0
  251.     dc.b    'zm_int_stop',0
  252.     dc.b    'zm_control_tempo',0
  253.     dc.b    'zm_convert_pcm',0
  254.     dc.b    'zm_exec_zmd',0
  255.     dc.b    0            *end code
  256.     .even
  257.  
  258. parameter:
  259.     dc.l    m_alloc_p
  260.     dc.l    m_assign_p
  261.     dc.l    m_assign2_p
  262.     dc.l    m_vget_p
  263.     dc.l    m_vset_p
  264.     dc.l    m_fmvset_p
  265.     dc.l    m_tempo_p
  266.     dc.l    m_trk_p
  267.     dc.l    m_trk2_p
  268.     dc.l    m_play_p
  269.     dc.l    m_stop_p
  270.     dc.l    m_cont_p
  271.     dc.l    m_stat_p
  272.     dc.l    m_init_p
  273.     dc.l    m_atoi_p
  274.     dc.l    m_ch_p
  275.     dc.l    m_pcmset_p
  276.     dc.l    m_pcmplay_p
  277.     dc.l    m_rec_p
  278.     dc.l    m_rstop_p
  279.     dc.l    m_save_p
  280.     dc.l    m_trans_p
  281.     dc.l    m_inp_p
  282.     dc.l    m_out_p
  283.     dc.l    m_dirout_p
  284.     dc.l    m_exc_p
  285.     dc.l    m_roland_p
  286.     dc.l    m_total_p
  287.     dc.l    m_fadeout_p
  288.     dc.l    m_pcmcnf_p
  289.     dc.l    m_adpcm_block_p
  290.     dc.l    m_switch_p
  291.     dc.l    m_print_p
  292.     dc.l    m_detect_p
  293.     dc.l    sc55_init_p
  294.     dc.l    sc55_vr_p
  295.     dc.l    sc55_rvb_p
  296.     dc.l    sc55_cho_p
  297.     dc.l    sc55_pst_p
  298.     dc.l    sc55_pst_p
  299.     dc.l    sc55_dpr_p
  300.     dc.l    sc55_dpr_p
  301.     dc.l    sc55_prt_p
  302.     dc.l    sc55_dsp_p
  303.     dc.l    mt32_init_p
  304.     dc.l    mt32_pr_p
  305.     dc.l    mt32_rvb_p
  306.     dc.l    mt32_pst_p
  307.     dc.l    mt32_dst_p
  308.     dc.l    mt32_cmn_p
  309.     dc.l    mt32_ptch_p
  310.     dc.l    mt32_prtl_p
  311.     dc.l    mt32_prt_p
  312.     dc.l    u220_setup_p
  313.     dc.l    u220_pst_p
  314.     dc.l    u220_cmn_p
  315.     dc.l    u220_tmb_p
  316.     dc.l    u220_dst_p
  317.     dc.l    u220_dis_p
  318.     dc.l    u220_prt_p
  319.     dc.l    m1_mdch_p
  320.     dc.l    m1_ptst_p
  321.     dc.l    m1_efct_p
  322.     dc.l    m1_prt_p
  323.     dc.l    send_to_m1_p
  324.     dc.l    zmd_play_p
  325.     dc.l    m_debug_p
  326.     dc.l    m_count_p
  327.     dc.l    fm_master_p
  328.     dc.l    m_mute_p
  329.     dc.l    m_solo_p
  330.     dc.l    m_wave_form_p
  331.     dc.l    adpcm_to_pcm_p
  332.     dc.l    pcm_to_adpcm_p
  333.     dc.l    exec_zms_p
  334.     dc.l    zm_ver_p
  335. *V3系
  336.     dc.l    m_detect_p
  337.     dc.l    m_switch_p
  338.     dc.l    zm_work_p
  339.     dc.l    zm_assign_p
  340.     dc.l    zm_vget_p
  341.     dc.l    zm_vset_p
  342.     dc.l    zm_tempo_p
  343.     dc.l    zm_play_p
  344.     dc.l    zm_play_again_p
  345.     dc.l    zm_play_all_p
  346.     dc.l    zm_play2_p
  347.     dc.l    zm_stop_p
  348.     dc.l    zm_stop_all_p
  349.     dc.l    zm_cont_p
  350.     dc.l    zm_cont_all_p
  351.     dc.l    zm_play_status_all_ch_p
  352.     dc.l    zm_play_status_all_tr_p
  353.     dc.l    zm_play_status_ch_p
  354.     dc.l    zm_play_status_tr_p
  355.     dc.l    zm_init_p
  356.     dc.l    zm_atoi_p
  357.     dc.l    zm_check_zmsc_p
  358.     dc.l    zm_set_timer_value_p
  359.     dc.l    zm_set_master_clock_p
  360.     dc.l    zm_play_zmd_p
  361.     dc.l    zm_play_zmd_se_p
  362.     dc.l    zm_se_play_p
  363.     dc.l    zm_se_adpcm1_p
  364.     dc.l    zm_se_adpcm2_p
  365.     dc.l    zm_intercept_play_p
  366.     dc.l    zm_current_midi_in_p
  367.     dc.l    zm_current_midi_out_p
  368.     dc.l    zm_midi_transmission_p
  369.     dc.l    zm_exclusive_p
  370.     dc.l    zm_set_eox_wait_p
  371.     dc.l    zm_midi_inp1_p
  372.     dc.l    zm_midi_out1_p
  373.     dc.l    zm_midi_rec_p
  374.     dc.l    zm_midi_rec_end_p
  375.     dc.l    zm_gs_reset_p
  376.     dc.l    zm_gs_partial_reserve_p
  377.     dc.l    zm_gs_reverb_p
  378.     dc.l    zm_gs_chorus_p
  379.     dc.l    zm_gs_part_parameter_p
  380.     dc.l    zm_gs_part_parameter_p
  381.     dc.l    zm_gs_drum_setup_p
  382.     dc.l    zm_gs_drum_setup_p
  383.     dc.l    zm_gs_drum_name_p
  384.     dc.l    zm_gs_print_p
  385.     dc.l    zm_gs_display_p
  386.     dc.l    zm_gm_system_on_p
  387.     dc.l    zm_sc88_mode_set_p
  388.     dc.l    zm_sc88_reverb_p
  389.     dc.l    zm_sc88_chorus_p
  390.     dc.l    zm_sc88_delay_p
  391.     dc.l    zm_sc88_equalizer_p
  392.     dc.l    zm_sc88_part_parameter_p
  393.     dc.l    zm_sc88_part_parameter_p
  394.     dc.l    zm_sc88_drum_setup_p
  395.     dc.l    zm_sc88_drum_setup_p
  396.     dc.l    zm_sc88_drum_name_p
  397.     dc.l    zm_sc88_user_inst_p
  398.     dc.l    zm_sc88_user_drum_p
  399.     dc.l    zm_mt32_reset_p
  400.     dc.l    zm_mt32_partial_reserve_p
  401.     dc.l    zm_mt32_reverb_p
  402.     dc.l    zm_mt32_part_setup_p
  403.     dc.l    zm_mt32_drum_p
  404.     dc.l    zm_mt32_common_p
  405.     dc.l    zm_mt32_partial_p
  406.     dc.l    zm_mt32_patch_p
  407.     dc.l    zm_mt32_print_p
  408.     dc.l    zm_u220_setup_p
  409.     dc.l    zm_u220_part_setup_p
  410.     dc.l    zm_u220_common_p
  411.     dc.l    zm_u220_timbre_p
  412.     dc.l    zm_u220_drums_setup_p
  413.     dc.l    zm_u220_drums_inst_p
  414.     dc.l    zm_u220_print_p
  415.     dc.l    zm_m1_setup_p
  416.     dc.l    zm_m1_part_setup_p
  417.     dc.l    zm_m1_effect_setup_p
  418.     dc.l    zm_m1_print_p
  419.     dc.l    zm_send_to_m1_p
  420.     dc.l    zm_pcm_read_p
  421.     dc.l    zm_pcm_erase_p
  422.     dc.l    zm_register_zpd_p
  423.     dc.l    zm_set_zpd_table_p
  424.     dc.l    zm_exec_subfile_p
  425.     dc.l    zm_transmit_midi_dump_p
  426.     dc.l    zm_set_wave_form1_p
  427.     dc.l    zm_set_wave_form2_p
  428.     dc.l    zm_obtain_events_p
  429.     dc.l    zm_loop_control_p
  430.     dc.l    zm_mask_tracks_p
  431.     dc.l    zm_mask_all_tracks_p
  432.     dc.l    zm_solo_track_p
  433.     dc.l    zm_mask_channels_p
  434.     dc.l    zm_mask_all_channels_p
  435.     dc.l    zm_solo_channel_p
  436.     dc.l    zm_set_ch_output_level_p
  437.     dc.l    zm_set_tr_output_level_p
  438.     dc.l    zm_master_fader_p
  439.     dc.l    zm_get_fader_status_p
  440.     dc.l    zm_get_play_time_p
  441.     dc.l    zm_get_1st_comment_p
  442.     dc.l    zm_get_timer_mode_p
  443.     dc.l    zm_get_track_table_p
  444.     dc.l    zm_get_track_table_se_p
  445.     dc.l    zm_get_play_work_p
  446.     dc.l    zm_get_play_work_se_p
  447.     dc.l    zm_get_buffer_information_p
  448.     dc.l    zm_zmsc_status_p
  449.     dc.l    zm_calc_total_p
  450.     dc.l    zm_occupy_zmusic_p
  451.     dc.l    zm_occupy_compiler_p
  452.     dc.l    zm_store_error_p
  453.     dc.l    zm_print_error_p
  454.     dc.l    zm_get_mem_p
  455.     dc.l    zm_enlarge_mem_p
  456.     dc.l    zm_free_mem_p
  457.     dc.l    zm_free_mem2_p
  458.     dc.l    zm_exchange_memid_p
  459.     dc.l    zm_init_all_p
  460.     dc.l    zm_int_start_p
  461.     dc.l    zm_int_stop_p
  462.     dc.l    zm_control_tempo_p
  463.     dc.l    zm_convert_pcm_p
  464.     dc.l    zm_exec_zmd_p
  465.  
  466. m_alloc_p:    dc.w    int_val,int_val,int_ret
  467. m_assign_p:    dc.w    int_val,int_val,int_ret
  468. m_assign2_p:    dc.w    str_val,int_val,int_ret
  469. m_vget_p:    dc.w    int_val,ary2_c,int_ret
  470. m_vset_p:    dc.w    int_val,ary2_c,int_ret
  471. m_fmvset_p:    dc.w    int_val,ary2_c,int_ret
  472. m_tempo_p:    dc.w    int_omt,int_ret
  473. m_trk_p:    dc.w    int_val,str_val,int_ret
  474. m_trk2_p:    dc.w    str_val,int_val
  475.         dcb.w    7,int_omt
  476.         dc.w    int_ret
  477. m_play_p:    dcb.w    10,int_omt
  478.         dc.w    int_ret
  479. m_stop_p:    dcb.w    10,int_omt
  480.         dc.w    int_ret
  481. m_cont_p:    dcb.w    10,int_omt
  482.         dc.w    int_ret
  483. m_stat_p:    dc.w    int_val,int_ret
  484. m_init_p:    dc.w    int_omt,int_ret
  485. m_atoi_p:    dc.w    int_val,int_ret
  486. m_ch_p:        dc.w    str_val,int_ret
  487.         *    note    filename pitch
  488. m_pcmset_p:    dc.w    int_val,str_val,int_omt
  489.         *    volume    mix     delay
  490.         dc.w    int_omt,int_omt,int_omt
  491.         *    cut offset,size
  492.         dc.w    int_omt
  493.         *    reverse
  494.         dc.w    int_omt
  495.         *    fade point,level
  496.         dc.w    int_omt,int_ret
  497. m_pcmplay_p:    dc.w    int_val,int_val,int_val,int_ret
  498. m_rec_p:    dc.w    int_omt,int_ret
  499. m_rstop_p:    dc.w    int_omt,int_ret
  500. m_save_p:    dc.w    str_val,int_ret
  501. m_trans_p:    dc.w    str_val,int_ret
  502. m_inp_p:    dc.w    char_omt,int_ret
  503. m_out_p:    dc.w    char_val
  504.         dcb.w    9,char_omt
  505.         dc.w    int_ret
  506. m_dirout_p:    dc.w    ary1_c,int_omt,int_ret
  507. m_exc_p:    dc.w    ary1_c,int_omt,int_ret
  508. m_roland_p:    dc.w    char_val,char_val
  509.         dc.w    ary1_c,int_omt,int_ret
  510. m_total_p:    dc.w    int_ret
  511. m_fadeout_p:    dc.w    int_omt,int_ret
  512. m_pcmcnf_p:    dc.w    str_val,int_ret
  513. m_adpcm_block_p:    dc.w    str_val,int_ret
  514. m_switch_p:    dc.w    char_omt,str_omt,int_ret
  515. m_print_p:    dc.w    str_val,int_ret
  516. m_detect_p:    dc.w    char_omt,int_ret
  517. sc55_init_p    dc.w    char_omt,int_ret
  518. sc55_vr_p:    dc.w    ary1_c,char_omt,int_ret
  519. sc55_rvb_p:    dc.w    ary1_c,char_omt,int_ret
  520. sc55_cho_p:    dc.w    ary1_c,char_omt,int_ret
  521. sc55_pst_p:    dc.w    char_val,ary1_c,char_omt,int_ret
  522. sc55_dpr_p:    dc.w    char_val,char_val,ary1_c,char_omt,int_ret
  523. sc55_prt_p:    dc.w    str_val,char_omt,int_ret
  524. sc55_dsp_p:    dc.w    ary1_i,char_omt,int_ret
  525. mt32_init_p    dc.w    char_omt,int_ret
  526. mt32_pr_p:    dc.w    ary1_c,char_omt,int_ret
  527. mt32_rvb_p:    dc.w    ary1_c,char_omt,int_ret
  528. mt32_pst_p:    dc.w    ary1_c,char_omt,int_ret
  529. mt32_dst_p:    dc.w    char_val,ary1_c,char_omt
  530.         dc.w    int_ret
  531. mt32_cmn_p:    dc.w    char_val,str_val,ary1_c
  532.         dc.w    char_omt,int_ret
  533. mt32_ptch_p:    dc.w    char_val,ary1_c,char_omt
  534.         dc.w    int_ret
  535. mt32_prtl_p:    dc.w    char_val,char_val,ary1_c
  536.         dc.w    char_omt,int_ret
  537. mt32_prt_p:    dc.w    str_val,char_omt,int_ret
  538. u220_setup_p:    dc.w    ary1_c,char_omt,int_ret
  539. u220_pst_p:    dc.w    char_val,ary1_c,char_omt
  540.         dc.w    int_ret
  541. u220_cmn_p:    dc.w    ary1_c,char_omt,int_ret
  542. u220_tmb_p:    dc.w    char_val,str_val,ary1_c
  543.         dc.w    char_omt,int_ret
  544. u220_dst_p:    dc.w    ary1_c,char_omt,int_ret
  545. u220_dis_p:    dc.w    char_val,ary1_c
  546.         dc.w    char_omt,int_ret
  547. u220_prt_p:    dc.w    str_val,char_omt,int_ret
  548. m1_mdch_p:    dc.w    ary1_c,int_ret
  549. m1_ptst_p:    dc.w    ary1_c,int_ret
  550. m1_efct_p:    dc.w    ary1_c,int_ret
  551. m1_prt_p:    dc.w    str_val,int_ret
  552. send_to_m1_p:    dc.w    char_omt,int_ret
  553. zmd_play_p:    dc.w    str_val,int_ret
  554. m_debug_p:    dc.w    char_val,int_ret
  555. m_count_p:    dc.w    int_val,int_ret
  556. fm_master_p    dc.w    char_val,int_ret
  557. m_mute_p:    dcb.w    10,int_omt
  558.         dc.w    int_ret
  559. m_solo_p:    dcb.w    10,int_omt
  560.         dc.w    int_ret
  561. m_wave_form_p:    dc.w    int_val,int_val,int_omt
  562.         dc.w    ary1_i,int_ret
  563. adpcm_to_pcm_p:    dc.w    ary1_c,int_omt,ary1_i,int_ret
  564. pcm_to_adpcm_p:    dc.w    ary1_i,int_omt,ary1_c,int_ret
  565. exec_zms_p:    dc.w    str_val,int_ret
  566. zm_ver_p:    dc.w    char_omt,int_ret
  567.  
  568. zm_work_p:    dc.w    char_val,int_val,int_ret
  569. zm_assign_p:    dc.w    int_val,int_val,int_ret
  570. zm_vget_p:    dc.w    int_val,int_val,ary2_c,int_ret
  571. zm_vset_p:    dc.w    int_val,int_val,ary2_c,int_ret
  572. zm_tempo_p:    dc.w    int_val,int_val,int_ret
  573. zm_play_p:    dc.w    ary1_ic,int_ret
  574. zm_play_again_p:    dc.w    int_ret
  575. zm_play_all_p:    dc.w    int_ret
  576. zm_play2_p:    dc.w    int_omt,int_ret
  577. zm_stop_p:    dc.w    ary1_ic,int_ret
  578. zm_stop_all_p:    dc.w    int_ret
  579. zm_cont_p:    dc.w    ary1_ic,int_ret
  580. zm_cont_all_p:    dc.w    int_ret
  581. zm_play_status_all_ch_p:    dc.w    ary1_ic,int_ret
  582. zm_play_status_all_tr_p:    dc.w    ary1_ic,int_ret
  583. zm_play_status_ch_p:        dc.w    int_val,int_ret
  584. zm_play_status_tr_p:        dc.w    int_val,int_ret
  585. zm_init_p:    dc.w    int_val,int_ret
  586. zm_atoi_p:    dc.w    int_val,int_ret
  587. zm_check_zmsc_p:    dc.w    int_omt,int_ret
  588. zm_set_timer_value_p:    dc.w    int_val,int_val,int_ret
  589. zm_set_master_clock_p:    dc.w    int_val,ary1_ic,int_ret
  590. zm_play_zmd_p:        dc.w    int_val,ary1_ic,int_ret
  591. zm_play_zmd_se_p:    dc.w    ary1_ic,int_ret
  592. zm_se_play_p:        dc.w    ary1_ic,int_ret
  593. zm_se_adpcm1_p:        dc.w    char_val,char_val,char_val,char_val
  594.             dc.w    int_val,int_val,int_val,ary1_ic,int_ret
  595. zm_se_adpcm2_p:        dc.w    char_val,char_val,char_val,char_val
  596.             dc.w    int_val,int_val,int_val,int_ret
  597. zm_intercept_play_p:    dc.w    int_val,int_ret
  598. zm_current_midi_in_p:    dc.w    int_val,int_ret
  599. zm_current_midi_out_p:    dc.w    int_val,int_ret
  600. zm_midi_transmission_p:    dc.w    int_val,int_val,ary1_ic,int_ret
  601. zm_exclusive_p:        dc.w    int_val,int_val,int_val,ary1_ic,int_ret
  602. zm_set_eox_wait_p:    dc.w    int_val,int_val,int_ret
  603. zm_midi_inp1_p:    dc.w    int_val,int_val,int_ret
  604. zm_midi_out1_p:    dc.w    int_val,char_val,int_ret
  605. zm_midi_rec_p:    dc.w    int_val,int_ret
  606. zm_midi_rec_end_p:    dc.w    int_val,int_ret
  607. zm_gs_reset_p:    dc.w    int_val,int_val,int_ret
  608. zm_gs_partial_reserve_p:    dc.w    int_val,int_val,ary1_ic,int_ret
  609. zm_gs_reverb_p:    dc.w    int_val,int_val,int_val,ary1_ic,int_ret
  610. zm_gs_chorus_p:    dc.w    int_val,int_val,int_val,ary1_ic,int_ret
  611. zm_gs_part_parameter_p:    dc.w    int_val,int_val,int_val,ary1_ic,int_ret
  612. zm_gs_drum_setup_p:    dc.w    int_val,int_val,int_val,ary1_ic,int_ret
  613. zm_gs_drum_name_p:    dc.w    int_val,int_val,int_val,str_val,int_ret
  614. zm_gs_print_p:        dc.w    int_val,int_val,int_val,str_val,int_ret
  615. zm_gs_display_p:    dc.w    int_val,int_val,ary1_ic,int_ret
  616. zm_gm_system_on_p:    dc.w    int_val,int_ret
  617. zm_sc88_mode_set_p:    dc.w    int_val,int_val,int_ret
  618. zm_sc88_reverb_p:    dc.w    int_val,int_val,int_val,ary1_ic,int_ret
  619. zm_sc88_chorus_p:    dc.w    int_val,int_val,int_val,ary1_ic,int_ret
  620. zm_sc88_delay_p:    dc.w    int_val,int_val,int_val,ary1_ic,int_ret
  621. zm_sc88_equalizer_p:    dc.w    int_val,int_val,int_val,ary1_ic,int_ret
  622. zm_sc88_part_parameter_p:    dc.w    int_val,int_val,int_val,ary1_ic,int_ret
  623. zm_sc88_drum_setup_p:    dc.w    int_val,int_val,int_val,ary1_ic,int_ret
  624. zm_sc88_drum_name_p:    dc.w    int_val,int_val,int_val,str_val,int_ret
  625. zm_sc88_user_inst_p:    dc.w    int_val,int_val,int_val,ary1_ic,int_ret
  626. zm_sc88_user_drum_p:    dc.w    int_val,int_val,int_val,ary1_ic,int_ret
  627. zm_mt32_reset_p:    dc.w    int_val,int_val,int_ret
  628. zm_mt32_partial_reserve_p:    dc.w    int_val,int_val,ary1_ic,int_ret
  629. zm_mt32_reverb_p:    dc.w    int_val,int_val,int_val,ary1_ic,int_ret
  630. zm_mt32_part_setup_p:    dc.w    int_val,int_val,int_val,ary1_ic,int_ret
  631. zm_mt32_drum_p:        dc.w    int_val,int_val,int_val,ary1_ic,int_ret
  632. zm_mt32_common_p:    dc.w    int_val,int_val,int_val,ary1_ic,int_ret
  633. zm_mt32_partial_p:    dc.w    int_val,int_val,int_val,ary1_ic,int_ret
  634. zm_mt32_patch_p:    dc.w    int_val,int_val,int_val,ary1_ic,int_ret
  635. zm_mt32_print_p:    dc.w    int_val,int_val,int_val,str_val,int_ret
  636. zm_u220_setup_p:    dc.w    int_val,int_val,ary1_ic,int_ret
  637. zm_u220_part_setup_p:    dc.w    int_val,int_val,ary1_ic,int_ret
  638. zm_u220_common_p:    dc.w    int_val,int_val,ary1_ic,int_ret
  639. zm_u220_timbre_p:    dc.w    int_val,int_val,ary1_ic,int_ret
  640. zm_u220_drums_setup_p:    dc.w    int_val,int_val,ary1_ic,int_ret
  641. zm_u220_drums_inst_p:    dc.w    int_val,int_val,ary1_ic,int_ret
  642. zm_u220_print_p:    dc.w    int_val,int_val,int_val,str_val,int_ret
  643. zm_m1_setup_p:    dc.w    ary1_ic,int_ret
  644. zm_m1_part_setup_p:    dc.w    ary1_ic,int_ret
  645. zm_m1_effect_setup_p:    dc.w    ary1_ic,int_ret
  646. zm_m1_print_p:    dc.w    int_val,str_val,int_ret
  647. zm_send_to_m1_p:    dc.w    int_val,int_val,int_ret
  648. zm_pcm_read_p:    dc.w    int_val,int_val,int_val,int_val,ary1_ic,int_ret
  649. zm_pcm_erase_p:    dc.w    int_val,int_ret
  650. zm_register_zpd_p:    dc.w    str_val,int_ret
  651. zm_set_zpd_table_p:    dc.w    int_val,ary1_ic,int_ret
  652. zm_exec_subfile_p:    dc.w    str_val,int_ret
  653. zm_transmit_midi_dump_p:    dc.w    int_val,str_val,int_ret
  654. zm_set_wave_form1_p:    dc.w    int_val,ary1_ic,int_ret
  655. zm_set_wave_form2_p:    dc.w    int_val,ary1_ic,int_ret
  656. zm_obtain_events_p:    dc.w    int_val,ary1_ic,int_ret
  657. zm_loop_control_p:    dc.w    int_val,int_ret
  658. zm_mask_tracks_p:    dc.w    ary1_ic,int_ret
  659. zm_mask_all_tracks_p:    dc.w    int_val,int_ret
  660. zm_solo_track_p:    dc.w    int_val,int_ret
  661. zm_mask_channels_p:    dc.w    ary1_ic,int_ret
  662. zm_mask_all_channels_p:    dc.w    int_val,int_ret
  663. zm_solo_channel_p:    dc.w    int_val,int_ret
  664. zm_set_ch_output_level_p:    dc.w    ary1_ic,int_ret
  665. zm_set_tr_output_level_p:    dc.w    ary1_ic,int_ret
  666. zm_master_fader_p:    dc.w    ary1_ic,int_ret
  667. zm_get_fader_status_p:    dc.w    int_ret
  668. zm_get_play_time_p:    dc.w    int_ret
  669. zm_get_1st_comment_p:    dc.w    int_ret
  670. zm_get_timer_mode_p:    dc.w    int_ret
  671. zm_get_track_table_p:    dc.w    int_ret
  672. zm_get_track_table_se_p:    dc.w    int_ret
  673. zm_get_play_work_p:    dc.w    int_val,int_ret
  674. zm_get_play_work_se_p:    dc.w    int_val,int_ret
  675. zm_get_buffer_information_p:    dc.w    int_ret
  676. zm_zmsc_status_p:    dc.w    int_ret
  677. zm_calc_total_p:    dc.w    ary1_c,int_vp,int_ret
  678. zm_occupy_zmusic_p:    dc.w    int_val,int_ret
  679. zm_occupy_compiler_p:    dc.w    int_val,int_ret
  680. zm_store_error_p:    dc.w    int_val,int_val,int_vp,int_ret
  681. zm_print_error_p:    dc.w    int_val,int_val,int_val,str_val
  682.             dc.w    ary1_ic,str_val,int_val,int_vp,int_ret
  683. zm_get_mem_p:    dc.w    int_val,int_val,int_ret
  684. zm_enlarge_mem_p:    dc.w    int_val,int_val,int_ret
  685. zm_free_mem_p:    dc.w    int_val,int_ret
  686. zm_free_mem2_p:    dc.w    int_val,int_ret
  687. zm_exchange_memid_p:    dc.w    int_val,int_val,int_val,int_val,int_ret
  688. zm_init_all_p:    dc.w    int_ret
  689. zm_int_start_p:    dc.w    int_val,int_ret
  690. zm_int_stop_p:    dc.w    int_val,int_ret
  691. zm_control_tempo_p:    dc.w    int_val,int_ret
  692. zm_convert_pcm_p:    dc.w    int_val,int_val,ary1_ic,ary1_ic,int_ret
  693. zm_exec_zmd_p:    dc.w    int_val,int_val,ary1_c,int_ret
  694.  
  695. exec_address:
  696.     dc.l    m_alloc
  697.     dc.l    m_assign
  698.     dc.l    m_assign2
  699.     dc.l    m_vget
  700.     dc.l    m_vset
  701.     dc.l    m_fmvset
  702.     dc.l    m_tempo
  703.     dc.l    m_trk
  704.     dc.l    m_trk2
  705.     dc.l    m_play
  706.     dc.l    m_stop
  707.     dc.l    m_cont
  708.     dc.l    m_stat
  709.     dc.l    m_init
  710.     dc.l    m_atoi
  711.     dc.l    m_ch
  712.     dc.l    m_pcmset
  713.     dc.l    m_pcmplay
  714.     dc.l    m_rec
  715.     dc.l    m_rstop
  716.     dc.l    m_save
  717.     dc.l    m_trans
  718.     dc.l    m_inp
  719.     dc.l    m_out
  720.     dc.l    m_dirout
  721.     dc.l    m_exc
  722.     dc.l    m_roland
  723.     dc.l    m_total
  724.     dc.l    m_fadeout
  725.     dc.l    m_pcmcnf
  726.     dc.l    m_adpcm_block
  727.     dc.l    m_switch
  728.     dc.l    m_print
  729.     dc.l    m_detect
  730.     dc.l    sc55_init
  731.     dc.l    sc55_vr
  732.     dc.l    sc55_rvb
  733.     dc.l    sc55_cho
  734.     dc.l    sc55_pst
  735.     dc.l    sc55_pst
  736.     dc.l    sc55_dst
  737.     dc.l    sc55_dst
  738.     dc.l    sc55_prt
  739.     dc.l    sc55_dsp
  740.     dc.l    mt32_init
  741.     dc.l    mt32_pr
  742.     dc.l    mt32_rvb
  743.     dc.l    mt32_pst
  744.     dc.l    mt32_dst
  745.     dc.l    mt32_cmn
  746.     dc.l    mt32_ptch
  747.     dc.l    mt32_prtl
  748.     dc.l    mt32_prt
  749.     dc.l    u220_setup
  750.     dc.l    u220_pst
  751.     dc.l    u220_cmn
  752.     dc.l    u220_tmb
  753.     dc.l    u220_dst
  754.     dc.l    u220_dis
  755.     dc.l    u220_prt
  756.     dc.l    m1_mdch
  757.     dc.l    m1_ptst
  758.     dc.l    m1_effect
  759.     dc.l    m1_prt
  760.     dc.l    send_m1
  761.     dc.l    zmd_play
  762.     dc.l    m_debug
  763.     dc.l    m_count
  764.     dc.l    fm_master
  765.     dc.l    m_mute
  766.     dc.l    m_solo
  767.     dc.l    m_wave_form
  768.     dc.l    adpcm_to_pcm
  769.     dc.l    pcm_to_adpcm
  770.     dc.l    exec_zms
  771.     dc.l    zm_ver
  772. *V3系
  773.     dc.l    m_detect
  774.     dc.l    m_switch
  775.     dc.l    zm_work
  776.     dc.l    zm_assign
  777.     dc.l    zm_vget
  778.     dc.l    zm_vset
  779.     dc.l    zm_tempo
  780.     dc.l    zm_play
  781.     dc.l    zm_play_again
  782.     dc.l    zm_play_all
  783.     dc.l    zm_play2
  784.     dc.l    zm_stop
  785.     dc.l    zm_stop_all
  786.     dc.l    zm_cont
  787.     dc.l    zm_cont_all
  788.     dc.l    zm_play_status_all_ch
  789.     dc.l    zm_play_status_all_tr
  790.     dc.l    zm_play_status_ch
  791.     dc.l    zm_play_status_tr
  792.     dc.l    zm_init
  793.     dc.l    zm_atoi
  794.     dc.l    zm_check_zmsc
  795.     dc.l    zm_set_timer_value
  796.     dc.l    zm_set_master_clock
  797.     dc.l    zm_play_zmd
  798.     dc.l    zm_play_zmd_se
  799.     dc.l    zm_se_play
  800.     dc.l    zm_se_adpcm1
  801.     dc.l    zm_se_adpcm2
  802.     dc.l    zm_intercept_play
  803.     dc.l    zm_current_midi_in
  804.     dc.l    zm_current_midi_out
  805.     dc.l    zm_midi_transmission
  806.     dc.l    zm_exclusive
  807.     dc.l    zm_set_eox_wait
  808.     dc.l    zm_midi_inp1
  809.     dc.l    zm_midi_out1
  810.     dc.l    zm_midi_rec
  811.     dc.l    zm_midi_rec_end
  812.     dc.l    zm_gs_reset
  813.     dc.l    zm_gs_partial_reserve
  814.     dc.l    zm_gs_reverb
  815.     dc.l    zm_gs_chorus
  816.     dc.l    zm_gs_part_parameter
  817.     dc.l    zm_gs_part_parameter
  818.     dc.l    zm_gs_drum_setup
  819.     dc.l    zm_gs_drum_setup
  820.     dc.l    zm_gs_drum_name
  821.     dc.l    zm_gs_print
  822.     dc.l    zm_gs_display
  823.     dc.l    zm_gm_system_on
  824.     dc.l    zm_sc88_mode_set
  825.     dc.l    zm_sc88_reverb
  826.     dc.l    zm_sc88_chorus
  827.     dc.l    zm_sc88_delay
  828.     dc.l    zm_sc88_equalizer
  829.     dc.l    zm_sc88_part_parameter
  830.     dc.l    zm_sc88_part_parameter
  831.     dc.l    zm_sc88_drum_setup
  832.     dc.l    zm_sc88_drum_setup
  833.     dc.l    zm_sc88_drum_name
  834.     dc.l    zm_sc88_user_inst
  835.     dc.l    zm_sc88_user_drum
  836.     dc.l    zm_mt32_reset
  837.     dc.l    zm_mt32_partial_reserve
  838.     dc.l    zm_mt32_reverb
  839.     dc.l    zm_mt32_part_setup
  840.     dc.l    zm_mt32_drum
  841.     dc.l    zm_mt32_common
  842.     dc.l    zm_mt32_partial
  843.     dc.l    zm_mt32_patch
  844.     dc.l    zm_mt32_print
  845.     dc.l    zm_u220_setup
  846.     dc.l    zm_u220_part_setup
  847.     dc.l    zm_u220_common
  848.     dc.l    zm_u220_timbre
  849.     dc.l    zm_u220_drums_setup
  850.     dc.l    zm_u220_drums_inst
  851.     dc.l    zm_u220_print
  852.     dc.l    zm_m1_setup
  853.     dc.l    zm_m1_part_setup
  854.     dc.l    zm_m1_effect_setup
  855.     dc.l    zm_m1_print
  856.     dc.l    zm_send_to_m1
  857.     dc.l    zm_pcm_read
  858.     dc.l    zm_pcm_erase
  859.     dc.l    zm_register_zpd
  860.     dc.l    zm_set_zpd_table
  861.     dc.l    zm_exec_subfile
  862.     dc.l    zm_transmit_midi_dump
  863.     dc.l    zm_set_wave_form1
  864.     dc.l    zm_set_wave_form2
  865.     dc.l    zm_obtain_events
  866.     dc.l    zm_loop_control
  867.     dc.l    zm_mask_tracks
  868.     dc.l    zm_mask_all_tracks
  869.     dc.l    zm_solo_track
  870.     dc.l    zm_mask_channels
  871.     dc.l    zm_mask_all_channels
  872.     dc.l    zm_solo_channel
  873.     dc.l    zm_set_ch_output_level
  874.     dc.l    zm_set_tr_output_level
  875.     dc.l    zm_master_fader
  876.     dc.l    zm_get_fader_status
  877.     dc.l    zm_get_play_time
  878.     dc.l    zm_get_1st_comment
  879.     dc.l    zm_get_timer_mode
  880.     dc.l    zm_get_track_table
  881.     dc.l    zm_get_track_table_se
  882.     dc.l    zm_get_play_work
  883.     dc.l    zm_get_play_work_se
  884.     dc.l    zm_get_buffer_information
  885.     dc.l    zm_zmsc_status
  886.     dc.l    zm_calc_total
  887.     dc.l    zm_occupy_zmusic
  888.     dc.l    zm_occupy_compiler
  889.     dc.l    zm_store_error
  890.     dc.l    zm_print_error
  891.     dc.l    zm_get_mem
  892.     dc.l    zm_enlarge_mem
  893.     dc.l    zm_free_mem
  894.     dc.l    zm_free_mem2
  895.     dc.l    zm_exchange_memid
  896.     dc.l    zm_init_all
  897.     dc.l    zm_int_start
  898.     dc.l    zm_int_stop
  899.     dc.l    zm_control_tempo
  900.     dc.l    zm_convert_pcm
  901.     dc.l    zm_exec_zmd
  902.  
  903. init:
  904. reglist    reg    d0-d1/a0/a6
  905.     movem.l    reglist,-(sp)
  906.     lea    work(pc),a6
  907.     clr.b    out_flg-work(a6)    *ファイル書き出しスイッチクリア
  908.  
  909.     bsr    chk_drv            *ドライバ常駐チェック
  910.     bpl    @f
  911.     clr.b    zm3_flg-work(a6)    *未登録
  912.     movem.l    (sp)+,reglist
  913.     rts
  914. @@:
  915.     st.b    zm3_flg-work(a6)    *登録
  916.     bsr    run
  917.     movem.l    (sp)+,reglist
  918.     rts
  919.  
  920. run:
  921. reglist    reg    d0-d1/a0-a1/a6
  922.     movem.l    reglist,-(sp)
  923.     lea    work(pc),a6
  924.  
  925.     clr.l    n_of_err-work(a6)    *コンパイル時に発生したエラーの数の初期化
  926.     clr.l    zmd_addr-work(a6)    *初期化
  927.                     *ZMSバッファ確保
  928.     move.l    zms_buffer_addr(pc),d0
  929.     beq    @f
  930.     clr.l    zms_buffer_addr-work(a6)
  931.     move.l    d0,-(sp)
  932.     DOS    _MFREE            *昔のバッファを解放
  933.     addq.w    #4,sp
  934. @@:
  935.     move.l    #zms_buffer_default_size,-(sp)
  936.     DOS    _MALLOC
  937.     addq.w    #4,sp
  938.     tst.l    d0            *確保失敗
  939.     bmi    @f
  940.     move.l    d0,zms_buffer_addr-work(a6)
  941.     move.l    #zms_buffer_default_size,zms_buffer_size-work(a6)
  942.     clr.l    zms_buffer_ptr-work(a6)
  943. @@:
  944.     clr.b    compiler_flg-work(a6)
  945.     tst.b    zm3_flg-work(a6)
  946.     beq    @f
  947.     suba.l    a1,a1            *演奏停止
  948.     Z_MUSIC    #ZM_STOP
  949.     moveq.l    #ZM_COMPILER,d1
  950.     lea    -1.w,a1            *detect mode
  951.     Z_MUSIC    #ZM_HOOK_FNC_SERVICE
  952.     move.l    a0,d0
  953.     sne    compiler_flg-work(a6)
  954. @@:
  955.     movem.l    (sp)+,reglist
  956.     rts
  957.  
  958. chk_drv:            *デバイス名のcheck
  959.     * > eq=no error
  960.     * > mi=error
  961.     clr.l    -(sp)
  962.     DOS    _SUPER
  963.     addq.w    #4,sp
  964.     move.l    d0,-(sp)
  965.  
  966.     moveq.l    #-1,d1
  967.     move.l    $8c.w,a0
  968.     subq.w    #8,a0
  969.     cmpi.l    #'ZmuS',(a0)+
  970.     bne    @f
  971.     cmpi.w    #'iC',(a0)+
  972.     bne    @f
  973.     move.w    (a0),zm_ver_buf
  974.     cmpi.b    #$30,(a0)
  975.     bcs    @f        *version error
  976.     moveq.l    #0,d1
  977. @@:
  978.     DOS    _SUPER        *見付けた
  979.     addq.w    #4,sp
  980.     move.l    d1,d0
  981.     rts
  982.  
  983. ctrl_d:
  984. reglist    reg    d0/a0-a1
  985.     movem.l    reglist,-(sp)
  986.     move.b    zm3_flg(pc),d0    *d0=dummy
  987.     beq    @f
  988.     suba.l    a1,a1
  989.     Z_MUSIC    #ZM_STOP
  990. @@:
  991.     movem.l    (sp)+,reglist
  992. end:
  993. break:
  994. system:
  995. yobi:
  996.     rts
  997.  
  998. m_alloc:            *V2 トラックバッファの確保(dummy)
  999.     bra    ok_0
  1000.  
  1001. m_assign:            *V2 チャンネルアサイン
  1002.     bsr    check_zm3
  1003.     move.w    #'(a',d0
  1004.     bsr    do_wrt_zms_w
  1005.     move.l    par1+val(sp),d0    *ch
  1006.     bsr    wrt_num
  1007.     moveq    #',',d0
  1008.     bsr    do_wrt_zms_b
  1009.     move.l    par2+val(sp),d0    *tr
  1010.     bsr    wrt_num
  1011.     moveq    #')',d0
  1012.     bsr    do_wrt_zms_b
  1013.     bsr    compile_zms
  1014.     bra    ok_0
  1015.  
  1016. m_assign2:            *V2 文字列チャンネルアサイン
  1017.     bsr    check_zm3
  1018.     move.w    #'(a',d0
  1019.     bsr    do_wrt_zms_w
  1020.     move.l    par1+val(sp),a0
  1021.     bsr    wrt_str
  1022.     moveq    #',',d0
  1023.     bsr    do_wrt_zms_b
  1024.     move.l    par2+val(sp),d0
  1025.     bsr    wrt_num
  1026.     moveq    #')',d0
  1027.     bsr    do_wrt_zms_b
  1028.     bsr    compile_zms
  1029.     bra    ok_0
  1030.  
  1031. m_vget:                *V2 音色取りだし
  1032.     bsr    check_zm3
  1033.     move.l    par1+val(sp),d1    *sound number
  1034.     movea.l    par2+val(sp),a1    *配列
  1035.     cmpi.w    #4,dim1(a1)
  1036.     bne    mz_illegal_arry    *配列の次元が違う
  1037.     cmpi.w    #10,dim2(a1)
  1038.     bne    mz_illegal_arry    *配列の次元が違う
  1039.     lea    dim2_data(a1),a1
  1040.     moveq.l    #0,d2        *normal
  1041.     Z_MUSIC    #ZM_VGET
  1042.     tst.l    d0
  1043.     bne    error
  1044.     bra    ok_0
  1045.  
  1046. m_vset:                *V2 FM音源音色登録
  1047.     bsr    check_zm3
  1048.     move.w    #'(v',d0
  1049.     bsr    do_wrt_zms_w
  1050.     move.l    par1+val(sp),d0
  1051.     bsr    wrt_num
  1052.     move.l    #',0'*65536+$0d0a,d0
  1053.     bsr    do_wrt_zms_l
  1054.     move.l    par2+val(sp),a1
  1055.     cmpi.w    #4,dim1(a1)
  1056.     bne    mz_illegal_arry    *配列の次元が違う
  1057.     cmpi.w    #10,dim2(a1)
  1058.     bne    mz_illegal_arry    *配列の次元が違う
  1059.     lea    dim2_data(a1),a1
  1060.     lea    rem1(pc),a0
  1061.     bsr    wrt_str
  1062.     moveq.l    #4,d1
  1063. mvslp00:
  1064.     cmpi.b    #3,d1
  1065.     bne    non_rem2
  1066.     lea    rem2(pc),a0
  1067.     bsr    wrt_str
  1068. non_rem2:
  1069.     moveq    #9,d0
  1070.     bsr    do_wrt_zms_b
  1071.     moveq.l    #11-1,d2
  1072. mvslp01:
  1073.     moveq.l    #0,d0
  1074.     move.b    (a1)+,d0
  1075.     bsr    wrt_num2
  1076.     moveq    #',',d0
  1077.     bsr    do_wrt_zms_b
  1078.     dbra    d2,mvslp01
  1079.     tst.w    d1
  1080.     bne    @f
  1081.     move.l    #') '*65536+$0d0a,d0    *ライトの場合は')'
  1082.     bsr    do_wrt_zms_l
  1083.     bra    1f
  1084. @@:
  1085.     move.w    #$0d0a,d0
  1086.     bsr    do_wrt_zms_w
  1087. 1:
  1088.     dbra    d1,mvslp00
  1089.     bsr    compile_zms
  1090.     bra    ok_0
  1091.  
  1092. m_fmvset:            *V2 FM音源音色登録その2
  1093.     bsr    check_zm3
  1094.     lea    rem2(pc),a0
  1095.     moveq    #9,d0
  1096.     bsr    do_wrt_zms_b
  1097.     lea    fmvset(pc),a0    *cmd header
  1098.     bsr    wrt_str
  1099.     move.l    par1+val(sp),d0
  1100.     bsr    wrt_num        *tone number
  1101.     moveq    #'{',d0
  1102.     bsr    do_wrt_zms_b
  1103.     move.l    par2+val(sp),a1
  1104.     cmpi.w    #4,dim1(a1)
  1105.     bne    mz_illegal_arry
  1106.     cmpi.w    #10,dim2(a1)
  1107.     bne    mz_illegal_arry
  1108.     lea    dim2_data(a1),a1
  1109.     moveq.l    #4,d1
  1110. fmvslp00:
  1111.     tst.b    d1
  1112.     bne    non_rem3
  1113.     lea    rem3(pc),a0
  1114.     bsr    wrt_str
  1115. non_rem3:
  1116.     cmpi.b    #4,d1
  1117.     beq    only1tab
  1118.     moveq    #9,d0
  1119.     bsr    do_wrt_zms_b
  1120. only1tab:
  1121.     moveq    #9,d0
  1122.     bsr    do_wrt_zms_b
  1123. _11dt:
  1124.     moveq.l    #11-1,d2
  1125. fmvslp01:
  1126.     moveq.l    #0,d0
  1127.     move.b    (a1)+,d0
  1128.     bsr    wrt_num2
  1129.     moveq    #',',d0
  1130.     bsr    do_wrt_zms_b
  1131.     dbra    d2,fmvslp01
  1132.     tst.w    d1
  1133.     bne    @f
  1134.     move.l    #') '*65536+$0d0a,d0    *ライトの場合は')'
  1135.     bsr    do_wrt_zms_l
  1136.     bra    1f
  1137. @@:
  1138.     move.w    #$0d0a,d0
  1139.     bsr    do_wrt_zms_w
  1140. 1:
  1141.     dbra    d1,fmvslp00
  1142.     bsr    compile_zms
  1143.     bra    ok_0
  1144.  
  1145. m_tempo:            *V2 テンポ
  1146.     bsr    check_zm3
  1147.     tst.w    par1(sp)
  1148.     bmi    @f        *ask mode
  1149.     move.w    #'(o',d0
  1150.     bsr    do_wrt_zms_w
  1151.     move.l    par1+val(sp),d0    *tempo value
  1152.     bsr    wrt_num
  1153.     moveq    #')',d0
  1154.     bsr    do_wrt_zms_b
  1155.     bsr    compile_zms
  1156.     bra    ok_0
  1157. @@:                *ask mode
  1158.     moveq.l    #-1,d1
  1159.     Z_MUSIC    #ZM_TEMPO
  1160.     bra    ok_ret        *戻り値有りのケース
  1161.  
  1162. m_trk:                *V2トラック書き込み
  1163.     bsr    check_zm3
  1164.     move.w    #'(t',d0
  1165.     bsr    do_wrt_zms_w
  1166.     move.l    par1+val(sp),d0    *trk num
  1167.     bsr    wrt_num
  1168.     moveq    #')',d0
  1169.     bsr    do_wrt_zms_b
  1170.     move.l    par2+val(sp),a0    *mml str addres
  1171.     bsr    wrt_str
  1172.     bsr    compile_zms
  1173.     bra    ok_0
  1174.  
  1175. m_trk2:                *V2 トラック書き込み #2
  1176.     bsr    check_zm3
  1177.     move.w    #'(t',d0
  1178.     bsr    do_wrt_zms_w
  1179.     lea.l    par2(sp),a3
  1180.     moveq.l    #8-1,d3
  1181. mt2_lp:
  1182.     tst.w    (a3)        *省略チェック
  1183.     bmi    end_mt2l
  1184.     addq.w    #val,a3
  1185.     cmpi.b    #8-1,d3
  1186.     beq    @f
  1187.     moveq    #',',d0        *','はラストはいらない
  1188. @@:
  1189.     bsr    do_wrt_zms_b
  1190.     move.l    (a3)+,d0
  1191.     bsr    wrt_num
  1192.     dbra    d3,mt2_lp
  1193. end_mt2l:
  1194.     moveq    #')',d0
  1195.     bsr    do_wrt_zms_b
  1196.     move.l    par1+val(sp),a0    *mml str addres
  1197.     bsr    wrt_str
  1198.     bsr    compile_zms
  1199.     bra    ok_0
  1200.  
  1201. m_play:                *V2 演奏開始
  1202.     bsr    check_zm3
  1203.     move.w    #'(p',d0
  1204.     bsr    do_wrt_zms_w
  1205.     move.l    sp,a0
  1206.     bsr    wrt_trks    *トラック番号を書く
  1207.     moveq.l    #')',d0
  1208.     bsr    do_wrt_zms_b
  1209.     bsr    compile_zms
  1210.     bsr    go_play        *実際に演奏開始
  1211.     bne    error
  1212.     bra    ok_0
  1213.  
  1214. m_stop:                *V2 演奏停止
  1215.     bsr    check_zm3
  1216.     lea    par1(sp),a0
  1217.     bsr    get_trk_seq
  1218.     Z_MUSIC    #ZM_STOP
  1219.     tst.l    d0
  1220.     bne    error
  1221.     bra    ok_0
  1222.  
  1223. m_cont:                *V2 演奏再開
  1224.     bsr    check_zm3
  1225.     lea    par1(sp),a0
  1226.     bsr    get_trk_seq
  1227.     Z_MUSIC    #ZM_CONT
  1228.     tst.l    d0
  1229.     bne    error
  1230.     bra    ok_0
  1231.  
  1232. get_trk_seq:            *トラック番号パラメータ作成
  1233.     * < a0.l=par1(sp)
  1234.     * > a1.l=track numbers{tr.w,tr.w,...-1(.w)}
  1235. reglist    reg    d0-d1/d5/a0
  1236.     movem.l    reglist,-(sp)
  1237.     moveq.l    #10-1,d5    *basicのパラメータマックスが10個のため
  1238.     lea    trk_cmd(pc),a1
  1239. bps_lp:
  1240.     tst.w    (a0)        *省略?
  1241.     bmi    @f
  1242.     move.l    val(a0),d0    *get trk number
  1243.     subq.l    #1,d0
  1244.     cmpi.l    #tr_max-1,d0
  1245.     bhi    @f
  1246.     move.w    d0,(a1)+
  1247. @@:
  1248.     add.w    #next_par,a0        *次へ
  1249.     dbra    d5,bps_lp
  1250.     move.w    #-1,(a1)+    *endcode
  1251.     lea    trk_cmd(pc),a1    *戻り値
  1252.     movem.l    (sp)+,reglist
  1253.     rts
  1254.  
  1255. m_stat:                *V2 演奏状態検査
  1256.     bsr    check_zm3
  1257.     move.l    par1+val(sp),d2
  1258.     subq.b    #1,d2        *track number
  1259.     moveq.l    #3,d1        *track check mode
  1260.     Z_MUSIC    #ZM_PLAY_STATUS
  1261.     bra    ok_ret
  1262.  
  1263. m_init:                *V2 初期化
  1264.     bsr    check_zm3    *ドライバがアクティブかどうかチェック
  1265.     move.w    #'(i',d0
  1266.     bsr    do_wrt_zms_w
  1267.     tst.w    par1(sp)
  1268.     bmi    @f
  1269.     move.l    par1+val(sp),d0
  1270.     bsr    wrt_num
  1271. @@:
  1272.     moveq.l    #')',d0
  1273.     bsr    do_wrt_zms_b
  1274.     bsr    compile_zms
  1275.     bra    ok_0
  1276.  
  1277. m_atoi:                    *V2トラックアドレス取得
  1278.     bsr    check_zm3
  1279.     move.l    par1+val(sp),d1        *track number
  1280.     Z_MUSIC    #ZM_ATOI
  1281.     move.l    a0,d0
  1282.     beq    error
  1283.     bra    ok_ret
  1284.  
  1285. m_ch:                *V2 ベースチャンネル切り換え
  1286.     bsr    check_zm3
  1287.     move.w    #'(b',d0
  1288.     bsr    do_wrt_zms_w
  1289.     move.l    par1+val(sp),a0
  1290.     moveq.l    #0,d1
  1291.     move.b    (a0)+,d0
  1292.     bsr    mk_capital
  1293.     cmpi.b    #'M',d0
  1294.     bne    @f
  1295.     addq.b    #1,d1        *midiならd1=1
  1296. @@:
  1297.     move.l    d1,d0        *fmならd1=0
  1298.     bsr    wrt_num
  1299.     moveq    #')',d0
  1300.     bsr    do_wrt_zms_b
  1301.     bsr    compile_zms
  1302.     bra    ok_0
  1303.  
  1304. m_pcmset:            *V2 ADPCMデータリード
  1305.     bsr    check_zm3
  1306.     move.l    par1+val(sp),d0    *set note number
  1307.     bsr    wrt_num
  1308.     moveq    #'=',d0
  1309.     bsr    do_wrt_zms_b
  1310.     move.l    par2+val(sp),a0
  1311.     bsr    wrt_str        *write filename
  1312.     tst.w    par3(sp)
  1313.     bmi    @f
  1314.     move.w    #',p',d0    *pitch
  1315.     bsr    do_wrt_zms_w
  1316.     move.l    par3+val(sp),d0
  1317.     bsr    wrt_num
  1318. @@:
  1319.     tst.w    par4(sp)
  1320.     bmi    @f
  1321.     move.w    #',v',d0    *vol
  1322.     bsr    do_wrt_zms_w
  1323.     move.l    par4+val(sp),d0
  1324.     bsr    wrt_num
  1325. @@:
  1326.     tst.w    par7(sp)
  1327.     bmi    @f
  1328.     move.w    #',c',d0    *cut header
  1329.     bsr    do_wrt_zms_w
  1330.     move.l    par7+val(sp),d0
  1331.     move.l    d0,d1
  1332.     clr.w    d0
  1333.     swap    d0
  1334.     bsr    wrt_num        *write offset
  1335.     moveq    #',',d0
  1336.     bsr    do_wrt_zms_b
  1337.     move.w    d1,d0
  1338.     bsr    wrt_num        *write cut size
  1339. @@:
  1340.     tst.w    par8(sp)
  1341.     bmi    @f
  1342.     move.l    par8+val(sp),d0
  1343.     beq    @f
  1344.     move.w    #',r',d0    *reverse
  1345.     bsr    do_wrt_zms_w
  1346. @@:
  1347.     tst.w    par9(sp)
  1348.     bmi    @f
  1349.     move.w    #',f',d0    *fade in/out header
  1350.     bsr    do_wrt_zms_w
  1351.     move.l    par9+val(sp),d0
  1352.     move.l    d0,d1
  1353.     clr.w    d0
  1354.     swap    d0
  1355.     tst.w    d1        *check mode
  1356.     bpl    wrt_fp
  1357.     moveq    #'-',d0        *case:fade in
  1358.     bsr    do_wrt_zms_b
  1359. wrt_fp:
  1360.     bsr    wrt_num        *fade point
  1361.     moveq    #',',d0
  1362.     bsr    do_wrt_zms_b
  1363.     moveq.l    #0,d0
  1364.     move.b    d1,d0
  1365.     bsr    wrt_num        *fade level
  1366. @@:
  1367.     tst.w    par5(sp)
  1368.     bmi    @f
  1369.     move.w    #',m',d0    *mix header
  1370.     bsr    do_wrt_zms_w
  1371.     move.l    par5+val(sp),d0
  1372.     bsr    wrt_num
  1373.     tst.w    par6(sp)
  1374.     bmi    @f
  1375.     move.w    #',d',d0    *delay header
  1376.     bsr    do_wrt_zms_w
  1377.     move.l    par6+val(sp),d0
  1378.     bsr    wrt_num
  1379.     bsr    compile_zms
  1380.     bra    ok_0
  1381.  
  1382. m_pcmplay:                *V2 adpcm dataの演奏
  1383.     bsr    check_zm3
  1384.     move.l    par1+val(sp),d2        *get note
  1385.     move.l    par2+val(sp),d0        *get pan
  1386.     move.l    #$ff40_0000,d1        *-1:ADPCM,64:vol
  1387.     move.w    par3+val+2(sp),d1    *get frq
  1388.     lsl.w    #8,d0
  1389.     or.w    d0,d1
  1390.     move.l    #$e0,d4            *0:優先度,$e0:空きチャンネルスキャン
  1391.     Z_MUSIC    #ZM_SE_ADPCM2
  1392.     bra    ok_0
  1393.  
  1394. m_rec:                *V2 MIDIデータ録音
  1395.     bsr    check_zm3
  1396.     moveq    #-1,d1
  1397.     tst.w    par1(sp)
  1398.     bmi    @f
  1399.     move.l    par1+val(sp),d1
  1400. @@:
  1401.     Z_MUSIC    #ZM_MIDI_REC
  1402.     tst.l    d0
  1403.     bne    error
  1404.     bra    ok_0
  1405.  
  1406. m_rstop:            *V2 MIDIデータ録音停止
  1407.     bsr    check_zm3
  1408.     moveq.l    #-1,d1
  1409.     tst.w    par1(sp)
  1410.     bmi    @f
  1411.     move.l    par1+val(sp),d1
  1412. @@:
  1413.     Z_MUSIC    #ZM_MIDI_REC_END
  1414.     tst.l    d0
  1415.     bne    error
  1416.     bra    ok_0
  1417.  
  1418. m_save:                *V2 MIDIデータセーブ(Dummy)
  1419.     bra    ok_0
  1420.  
  1421. m_trans:            *V2 MIDIデータファイルの送信
  1422.     bsr    check_zm3
  1423.     lea    midi_dump(pc),a0    *command name
  1424.     bsr    wrt_str
  1425.     move.l    par1+val(sp),a0        *filename
  1426.     bsr    wrt_str
  1427.     bsr    compile_zms
  1428.     bra    ok_0
  1429.  
  1430. m_inp:                *MIDIデータ入力
  1431.     bsr    check_zm3
  1432.     moveq.l    #0,d2
  1433.     tst.w    par1(sp)        *省略?
  1434.     bmi    @f
  1435.     move.l    par1+val(sp),d2
  1436. @@:
  1437.     Z_MUSIC    #ZM_MIDI_INP1
  1438.     bra    ok_ret
  1439.  
  1440. m_out:                *V2 MIDIデータ出力
  1441.     bsr    check_zm3
  1442.     lea    midi_data(pc),a0
  1443.     bsr    wrt_str
  1444.     lea    par1(sp),a0
  1445.     moveq.l    #10-1,d1
  1446. _moutlp:
  1447.     tst.w    (a0)        *省略?
  1448.     bmi    @f
  1449.     move.l    val(a0),d0
  1450.     bsr    wrt_num3    *16進数書き込み
  1451.     moveq    #',',d0
  1452.     bsr    do_wrt_zms_b
  1453. @@:
  1454.     lea    next_par(a0),a0
  1455.     dbra    d1,_moutlp
  1456.     moveq.l    #'}',d0
  1457.     bsr    do_wrt_zms_b
  1458.     bsr    compile_zms
  1459.     bra    ok_0
  1460.  
  1461. m_dirout:            *V2 MIDIデータ送信
  1462.     bsr    check_zm3
  1463.     movea.l    par1+val(sp),a1    *配列
  1464.     moveq.l    #0,d2
  1465.     move.w    dim1(a1),d2    *添字取りだし
  1466.     addq.l    #1,d2        *サイズに直す
  1467.     lea    dim1_data(a1),a1
  1468.     tst.w    par2(sp)
  1469.     bmi    @f
  1470.     move.l    par2+val(sp),d1        *get size
  1471.     beq    mz_illegal_parameter
  1472.     cmp.l    d2,d1
  1473.     bhi    mz_illegal_parameter    *サイズが添え字より大きい!?
  1474.     move.l    d1,d2
  1475. @@:
  1476.     lea    midi_data(pc),a0
  1477. kyoutsu:
  1478.     bsr    wrt_str
  1479.     moveq    #9,d0
  1480.     bsr    do_wrt_zms_b
  1481. kyoutsu2:
  1482.     moveq.l    #0,d1        *一行のデータ数カウンタ
  1483. mdirlp00:
  1484.     moveq.l    #0,d0
  1485.     move.b    (a1)+,d0
  1486.     bsr    wrt_num3    *hex
  1487.     addq.b    #1,d1
  1488.     cmpi.b    #16,d1        *16データごと改行
  1489.     bne    1f
  1490.     moveq.l    #0,d1
  1491.     move.l    #$0d0a0909,d0
  1492.     bsr    do_wrt_zms_l
  1493.     bra    @f
  1494. 1:                *,で区切る
  1495.     cmp.l    #1,d2        *最後?
  1496.     beq    2f
  1497.     moveq    #',',d0
  1498.     bsr    do_wrt_zms_b
  1499.     bra    @f
  1500. 2:                *ラスト
  1501.     moveq    #'}',d0
  1502.     bsr    do_wrt_zms_b
  1503. @@:
  1504.     subq.l    #1,d2
  1505.     bne    mdirlp00
  1506.     bsr    compile_zms
  1507.     bra    ok_0
  1508.  
  1509. m_exc:                *V2 エクスクルーシブ転送
  1510.     bsr    check_zm3
  1511.     movea.l    par1+val(sp),a1    *配列
  1512.     moveq.l    #0,d2
  1513.     move.w    8(a1),d2    *d2=添え字の大きさ
  1514.     addq.l    #1,d2        *サイズに直す
  1515.     lea    10(a1),a1
  1516.     tst.w    par2(sp)
  1517.     bmi    @f            *省略のケース
  1518.     move.l    par2+val(sp),d1        *get size
  1519.     beq    mz_illegal_parameter
  1520.     cmp.l    d2,d1
  1521.     bhi    mz_illegal_parameter    *サイズが添え字より大きい!?
  1522.     move.l    d1,d2
  1523. @@:
  1524.     lea    exclusive(pc),a0
  1525.     bra    kyoutsu        *後はdiroutと共通
  1526.  
  1527. m_roland:            *V2 ROLANDエクスクルーシブ転送
  1528.     bsr    check_zm3
  1529.     move.l    par1+val(sp),d3    *dev id
  1530.     lsl.w    #8,d3
  1531.     move.l    par2+val(sp),d1    *model id
  1532.     move.b    d1,d3
  1533.     movea.l    par3+val(sp),a1    *配列
  1534.     moveq.l    #0,d2
  1535.     move.w    dim1(a1),d2    *d2=添え字の大きさ
  1536.     addq.l    #1,d2        *サイズに直す
  1537.     lea    dim1_data(a1),a1    *a1=data address
  1538.     tst.w    par4(sp)
  1539.     bmi    @f        *省略のケース
  1540.     move.l    par4+val(sp),d1    *get size
  1541.     beq    mz_illegal_parameter    *illegal parameter
  1542.     cmp.l    d2,d1
  1543.     bhi    mz_illegal_parameter    *サイズが添え字より大きい!?
  1544.     move.l    d1,d2
  1545. @@:
  1546.     lea    roland(pc),a0
  1547.     bsr    wrt_str
  1548.     moveq.l    #0,d0
  1549.     ror.w    #8,d3
  1550.     move.b    d3,d0
  1551.     bsr    wrt_num3    *dev
  1552.     moveq    #',',d0
  1553.     bsr    do_wrt_zms_b
  1554.     lsr.w    #8,d3
  1555.     move.b    d3,d0
  1556.     bsr    wrt_num3    *model
  1557.     move.l    #' {'*65536+$0d0a,d0
  1558.     bsr    do_wrt_zms_l
  1559.     move.w    #$0909,d0
  1560.     bsr    do_wrt_zms_w
  1561.     bra    kyoutsu2    *後はdiroutと共通
  1562.  
  1563. m_total:            *V2 ステップタイムのトータル値表示(Dummy)
  1564.     bra    ok_0
  1565.  
  1566. m_fadeout:            *フェードアウト
  1567.     bsr    check_zm3
  1568.     tst.w    par1(sp)        *省略?
  1569.     bpl    @f
  1570.     move.w    #$00_80,d2        *end=$00,start=$80
  1571.     moveq.l    #fader_dflt_spd,d1    *deafult speed
  1572.     bra    1f
  1573. @@:
  1574.     move.l    par1+val(sp),d1
  1575.     move.w    #$00_80,d2        *end=$00,start=$80
  1576.     tst.l    d1
  1577.     bne    @f
  1578.     move.w    #$80_80,d2
  1579.     bra    1f
  1580. @@:
  1581.     bpl    @f
  1582.     neg.l    d1
  1583.     move.w    #$80_00,d2        *end=$80,start=$00
  1584. @@:
  1585.     cmpi.l    #255,d1            *check speed
  1586.     bhi    mz_illegal_fader_speed
  1587. 1:
  1588.     lea    fdr_cmd(pc),a1        *param. tbl
  1589.     move.l    a1,a0
  1590.     move.w    #-1,(a0)+        *all
  1591.     move.b    #%0000_0111,(a0)+
  1592.     move.b    d1,(a0)+
  1593.     clr.b    (a0)+
  1594.     move.b    d2,(a0)+        *start level
  1595.     rol.w    #8,d2            *end level
  1596.     move.b    d2,(a0)+
  1597.     Z_MUSIC    #ZM_MASTER_FADER
  1598.     tst.l    d0
  1599.     bne    error
  1600.     bra    ok_0
  1601.  
  1602. m_pcmcnf:            *V2 ADPCMコンフィギュレーションファイルセット
  1603.     bsr    check_zm3
  1604.     lea    adpcm_list(pc),a0
  1605.     bsr    wrt_str
  1606.     move.l    par1+val(sp),a0
  1607.     tst.b    (a0)
  1608.     beq    mz_nul_string_error
  1609.     bsr    wrt_str
  1610.     bsr    compile_zms
  1611.     bra    ok_0
  1612.  
  1613. m_adpcm_block:            *V2 ブロックデータの読み込み
  1614.     bsr    check_zm3
  1615.     lea    adpcm_block_(pc),a0
  1616.     bsr    wrt_str
  1617.     move.l    par1+val(sp),a0
  1618.     tst.b    (a0)
  1619.     beq    mz_nul_string_error
  1620.     bsr    wrt_str
  1621.     bsr    compile_zms
  1622.     bra    ok_0
  1623.  
  1624. m_detect:            *V2 コンパイルモード
  1625.     bsr    check_zm3
  1626.     clr.b    detect_mode
  1627.     tst.w    par1(sp)
  1628.     bmi    ok_0
  1629.     tst.l    par1+val(sp)
  1630.     sne    detect_mode
  1631.     bra    ok_0
  1632.  
  1633. m_switch:            *V2 ファイル書き出しモード
  1634.     bsr    check_zm3
  1635.     tst.w    par1(sp)    *省略時
  1636.     bmi    @f
  1637.     move.l    par1+val(sp),d0
  1638.     sne    out_flg-work(a6)    *ファイル出力フラグ
  1639. @@:
  1640.     tst.w    par2(sp)
  1641.     bmi    1f        *ファイルネーム省略時はデフォルトを生成
  1642.     move.l    par2+val(sp),a0
  1643.     bra    @f
  1644. 1:
  1645.     lea    dflt_fn(pc),a0
  1646. @@:
  1647.     lea    gene_fn(pc),a1
  1648.     moveq.l    #0,d1
  1649. gfnlp:
  1650.     move.b    (a0)+,d0
  1651.     cmpi.b    #'.',d0
  1652.     bne    @f
  1653.     st    d1
  1654. @@:
  1655.     move.b    d0,(a1)+
  1656.     cmpi.b    #' ',d0
  1657.     bhi    gfnlp        *終了
  1658.     subq.w    #1,a1
  1659.     tst.b    d1
  1660.     bne    ok_0
  1661.     move.b    #'.',(a1)+    *拡張子をセット
  1662.     move.b    #'Z',(a1)+
  1663.     move.b    #'M',(a1)+
  1664.     move.b    #'S',(a1)+
  1665.     clr.b    (a1)
  1666.     bra    ok_0
  1667.  
  1668. m_print:            *文字列を表示する
  1669.     bsr    check_zm3
  1670.     lea    m_prt_(pc),a0
  1671.     bsr    wrt_str
  1672.     move.w    #' "',d0
  1673.     bsr    do_wrt_zms_w
  1674.     move.l    par1+val(sp),a0
  1675.     tst.b    (a0)
  1676.     beq    mz_nul_string_error    *length=0は駄目
  1677.     bsr    wrt_str
  1678.     moveq    #'"',d0
  1679.     bsr    do_wrt_zms_b
  1680.     bsr    compile_zms
  1681.     bra    ok_0
  1682.  
  1683. sc55_init:            *V2 SC55初期化
  1684.     bsr    check_zm3
  1685.     moveq.l    #-1,d3
  1686.     tst.w    par1(sp)
  1687.     bmi    @f
  1688.     move.l    par1+val(sp),d3    *get dev id
  1689. @@:
  1690.     lea    sc55_init_(pc),a0
  1691.     bsr    wrt_str
  1692.     tst.l    d3
  1693.     bmi    @f
  1694.     moveq    #' ',d0
  1695.     bsr    do_wrt_zms_b
  1696.     move.l    d3,d0
  1697.     bsr    wrt_num3    *dev id
  1698. @@:
  1699.     bsr    compile_zms
  1700.     bra    ok_0
  1701.  
  1702. sc55_vr:            *V2 sc55 voice resereve
  1703.     bsr    check_zm3
  1704.     movea.l    par1+val(sp),a1
  1705.     cmpi.w    #16-1,dim1(a1)
  1706.     bne    mz_illegal_arry        *配列のサイズが違う
  1707.     lea    dim1_data(a1),a1    *a1=data pointer
  1708.     moveq.l    #-1,d3
  1709.     tst.w    par2(sp)
  1710.     bmi    @f
  1711.     move.l    par2+val(sp),d3    *get dev id
  1712. @@:
  1713.     lea    sc55_vr_(pc),a0
  1714.     bsr    wrt_str
  1715.     move.l    d3,d0
  1716.     bmi    @f
  1717.     bsr    wrt_num3    *dev id
  1718. @@:
  1719.     move.w    #' {',d0
  1720.     bsr    do_wrt_zms_w
  1721.     moveq.l    #16-1,d1
  1722. @@:
  1723.     moveq.l    #0,d0
  1724.     move.b    (a1)+,d0
  1725.     bsr    wrt_num
  1726.     tst.w    d1
  1727.     bne    1f
  1728.     moveq.l    #'}',d0
  1729.     bsr    do_wrt_zms_b
  1730.     bra    2f
  1731. 1:                *,で区切る
  1732.     moveq    #',',d0
  1733.     bsr    do_wrt_zms_b
  1734. 2:
  1735.     dbra    d1,@b
  1736.     bsr    compile_zms
  1737.     bra    ok_0
  1738.  
  1739. sc55_rvb:            *V2 sc55 reverb parameter
  1740.     bsr    check_zm3
  1741.     movea.l    par1+val(sp),a1
  1742.     cmpi.w    #7-1,dim1(a1)
  1743.     bhi    mz_illegal_arry        *配列のサイズが違う
  1744.     move.w    dim1(a1),d1        *d2=添え字の大きさ(=dbra counter)
  1745.     lea    dim1_data(a1),a1    *a1=data pointer
  1746.     moveq.l    #-1,d3
  1747.     tst.w    par2(sp)
  1748.     bmi    @f
  1749.     move.l    par2+val(sp),d3    *get dev id
  1750. @@:
  1751.     lea    sc55_rvb_(pc),a0
  1752.     bsr    wrt_str
  1753.     move.l    d3,d0
  1754.     bmi    @f
  1755.     bsr    wrt_num3    *dev id
  1756. @@:
  1757.     move.w    #' {',d0
  1758.     bsr    do_wrt_zms_w
  1759. @@:
  1760.     moveq.l    #0,d0
  1761.     move.b    (a1)+,d0
  1762.     bsr    wrt_num
  1763.     tst.w    d1
  1764.     bne    1f
  1765.     moveq.l    #'}',d0
  1766.     bsr    do_wrt_zms_b
  1767.     bra    2f
  1768. 1:                *,で区切る
  1769.     moveq    #',',d0
  1770.     bsr    do_wrt_zms_b
  1771. 2:
  1772.     dbra    d1,@b
  1773.     bsr    compile_zms
  1774.     bra    ok_0
  1775.  
  1776. sc55_cho:            *V2 sc55 chorus parameter
  1777.     bsr    check_zm3
  1778.     movea.l    par1+val(sp),a1
  1779.     cmpi.w    #8-1,dim1(a1)
  1780.     bhi    mz_illegal_arry        *配列のサイズが違う
  1781.     move.w    dim1(a1),d1        *d2=添え字の大きさ(=dbra counter)
  1782.     lea    dim1_data(a1),a1    *a1=data pointer
  1783.     moveq.l    #-1,d3
  1784.     tst.w    par2(sp)
  1785.     bmi    @f
  1786.     move.l    par2+val(sp),d3        *get dev id
  1787. @@:
  1788.     lea    sc55_cho_(pc),a0
  1789.     bsr    wrt_str
  1790.     move.l    d3,d0
  1791.     bmi    @f
  1792.     bsr    wrt_num3    *dev id
  1793. @@:
  1794.     move.w    #' {',d0
  1795.     bsr    do_wrt_zms_w
  1796. @@:
  1797.     moveq.l    #0,d0
  1798.     move.b    (a1)+,d0
  1799.     bsr    wrt_num
  1800.     tst.w    d1
  1801.     bne    1f
  1802.     moveq.l    #'}',d0
  1803.     bsr    do_wrt_zms_b
  1804.     bra    2f
  1805. 1:                *,で区切る
  1806.     moveq    #',',d0
  1807.     bsr    do_wrt_zms_b
  1808. 2:
  1809.     dbra    d1,@b
  1810.     bsr    compile_zms
  1811.     bra    ok_0
  1812.  
  1813. sc55_pst:            *V2 sc55 part parameter
  1814.     bsr    check_zm3
  1815.     move.l    par1+val(sp),d1        *get part number
  1816.     cmpi.l    #16,d1
  1817.     bhi    mz_illegal_parameter    *16以上はエラー
  1818.     movea.l    par2+val(sp),a1
  1819.     cmpi.w    #119-1,dim1(a1)
  1820.     bhi    mz_illegal_arry        *配列のサイズが違う
  1821.     move.w    dim1(a1),d2        *d2=添え字の大きさ(=dbra counter)
  1822.     lea    dim1_data(a1),a1    *a1=data pointer
  1823.     moveq.l    #-1,d3
  1824.     tst.w    par3(sp)
  1825.     bmi    @f
  1826.     move.l    par3+val(sp),d3    *get dev id
  1827. @@:
  1828.     lea    sc55_pst_(pc),a0
  1829.     bsr    wrt_str
  1830.     move.l    d1,d0
  1831.     bsr    wrt_num3    *part number
  1832.     tst.l    d3
  1833.     bmi    @f
  1834.     moveq    #',',d0
  1835.     bsr    do_wrt_zms_b
  1836.     move.l    d3,d0
  1837.     bsr    wrt_num3    *dev id
  1838. @@:
  1839.     move.w    #' {',d0
  1840.     bsr    do_wrt_zms_w
  1841. @@:
  1842.     moveq.l    #0,d0
  1843.     move.b    (a1)+,d0
  1844.     bsr    wrt_num
  1845.     tst.w    d2
  1846.     bne    1f
  1847.     moveq.l    #'}',d0
  1848.     bsr    do_wrt_zms_b
  1849.     bra    2f
  1850. 1:                *,で区切る
  1851.     moveq    #',',d0
  1852.     bsr    do_wrt_zms_b
  1853. 2:
  1854.     dbra    d2,@b
  1855.     bsr    compile_zms
  1856.     bra    ok_0
  1857.  
  1858. sc55_dst:            *sc55 drum parameter
  1859.     bsr    check_zm3
  1860.     move.l    par1+val(sp),d0        *get map number
  1861.     cmpi.l    #1,d0
  1862.     bhi    mz_illegal_parameter    *1以上はエラー
  1863.     move.l    par2+val(sp),d1        *get key code
  1864.     cmpi.l    #127,d1
  1865.     bhi    mz_illegal_parameter
  1866.     movea.l    par3+val(sp),a1
  1867.     cmpi.w    #8-1,dim1(a1)
  1868.     bhi    mz_illegal_arry        *配列のサイズが違う
  1869.     move.w    dim1(a1),d2        *d2=添え字の大きさ(=dbra counter)
  1870.     lea    dim1_data(a1),a1    *a1=data pointer
  1871.     moveq.l    #-1,d3
  1872.     tst.w    par4(sp)
  1873.     bmi    @f
  1874.     move.l    par4+val(sp),d3        *get dev id
  1875. @@:
  1876.     lea    sc55_dst_(pc),a0
  1877.     bsr    wrt_str
  1878.     bsr    wrt_num3    *map number
  1879.     moveq    #',',d0
  1880.     bsr    do_wrt_zms_b
  1881.     move.l    d1,d0
  1882.     bsr    wrt_num3    *key number
  1883.     move.l    d3,d0
  1884.     bmi    @f
  1885.     moveq    #',',d0
  1886.     bsr    do_wrt_zms_b
  1887.     bsr    wrt_num3    *dev id
  1888. @@:
  1889.     move.w    #' {',d0
  1890.     bsr    do_wrt_zms_w
  1891. @@:
  1892.     moveq.l    #0,d0
  1893.     move.b    (a1)+,d0
  1894.     bsr    wrt_num
  1895.     tst.w    d2
  1896.     bne    1f
  1897.     moveq.l    #'}',d0
  1898.     bsr    do_wrt_zms_b
  1899.     bra    2f
  1900. 1:                *,で区切る
  1901.     moveq    #',',d0
  1902.     bsr    do_wrt_zms_b
  1903. 2:
  1904.     dbra    d2,@b
  1905.     bsr    compile_zms
  1906.     bra    ok_0
  1907.  
  1908. sc55_prt:            *SC55に文字列を表示する
  1909.     bsr    check_zm3
  1910.     lea    sc55_prt_(pc),a0
  1911.     bsr    wrt_str
  1912.     tst.w    par2(sp)        *dev id省略?
  1913.     bmi    @f
  1914.     move.l    par2+val(sp),d0
  1915.     bsr    wrt_num3        *dev id
  1916. @@:
  1917.     move.w    #' "',d0
  1918.     bsr    do_wrt_zms_w
  1919.     move.l    par1+val(sp),a0
  1920.     tst.b    (a0)
  1921.     beq    mz_nul_string_error        *length=0は駄目
  1922.     bsr    wrt_str
  1923.     moveq    #'"',d0
  1924.     bsr    do_wrt_zms_b
  1925.     bsr    compile_zms
  1926.     bra    ok_0
  1927.  
  1928. sc55_dsp:            *SC55のレベル・ディスプレイに表示する
  1929.     bsr    check_zm3
  1930.     movea.l    par1+val(sp),a1
  1931.     cmpi.w    #16-1,dim1(a1)
  1932.     bne    mz_illegal_arry        *配列のサイズが違う
  1933.     lea    dim1_data(a1),a1    *a1=data pointer
  1934.     moveq.l    #-1,d3
  1935.     tst.w    par2(sp)
  1936.     bmi    @f
  1937.     move.l    par2+val(sp),d3    *get dev id
  1938. @@:
  1939.     lea    sc55_dsp_(pc),a0
  1940.     bsr    wrt_str
  1941.     move.l    d3,d0
  1942.     bmi    @f
  1943.     bsr    wrt_num3    *dev id
  1944. @@:
  1945.     move.w    #' {',d0
  1946.     bsr    do_wrt_zms_w
  1947.     moveq.l    #16-1,d2    *for dbra
  1948. sc55dsplp:
  1949.     moveq.l    #0,d0
  1950.     move.l    (a1)+,d0
  1951.     bsr    wrt_num
  1952.     tst.w    d2
  1953.     bne    1f
  1954.     moveq.l    #'}',d0
  1955.     bsr    do_wrt_zms_b
  1956.     bra    @f
  1957. 1:
  1958.     cmpi.w    #8,d2        *8個ずつまとめる
  1959.     bne    2f
  1960.     move.l    #$0d0a0909,d0
  1961.     bsr    do_wrt_zms_l
  1962.     bra    @f
  1963. 2:
  1964.     moveq    #',',d0
  1965.     bsr    do_wrt_zms_b
  1966. @@:
  1967.     dbra    d2,sc55dsplp
  1968.     bsr    compile_zms
  1969.     bra    ok_0
  1970.  
  1971. mt32_init:            *V2 MT32初期化
  1972.     bsr    check_zm3
  1973.     moveq.l    #-1,d3
  1974.     tst.w    par1(sp)
  1975.     bmi    @f
  1976.     move.l    par1+val(sp),d3    *get dev id
  1977. @@:
  1978.     lea    mt32_init_(pc),a0
  1979.     bsr    wrt_str
  1980.     tst.l    d3
  1981.     bmi    @f
  1982.     moveq    #' ',d0
  1983.     bsr    do_wrt_zms_b
  1984.     move.l    d3,d0
  1985.     bsr    wrt_num3    *dev id
  1986. @@:
  1987.     bsr    compile_zms
  1988.     bra    ok_0
  1989.  
  1990. mt32_pr:            *V2 mt32パーシャルリザーブ
  1991.     bsr    check_zm3
  1992.     movea.l    par1+val(sp),a1
  1993.     cmpi.w    #9-1,dim1(a1)
  1994.     bne    mz_illegal_arry        *配列のサイズが違う
  1995.     lea    dim1_data(a1),a1    *a1=data pointer
  1996.     moveq.l    #-1,d3
  1997.     tst.w    par2(sp)
  1998.     bmi    @f
  1999.     move.l    par2+val(sp),d3    *get dev id
  2000. @@:
  2001.     lea    mt32_pr_(pc),a0
  2002.     bsr    wrt_str
  2003.     move.l    d3,d0
  2004.     bmi    @f
  2005.     bsr    wrt_num3    *dev id
  2006. @@:
  2007.     move.w    #' {',d0
  2008.     bsr    do_wrt_zms_w
  2009.     moveq.l    #9-1,d1
  2010. @@:
  2011.     moveq.l    #0,d0
  2012.     move.b    (a1)+,d0
  2013.     bsr    wrt_num
  2014.     tst.w    d1
  2015.     bne    1f
  2016.     moveq    #'}',d0
  2017.     bsr    do_wrt_zms_b
  2018.     bra    2f
  2019. 1:
  2020.     moveq    #',',d0
  2021.     bsr    do_wrt_zms_b
  2022. 2:
  2023.     dbra    d1,@b
  2024.     bsr    compile_zms
  2025.     bra    ok_0
  2026.  
  2027. mt32_rvb:            *V2 mt32リバーブ・パラメータ設定
  2028.     bsr    check_zm3
  2029.     movea.l    par1+val(sp),a1
  2030.     move.w    dim1(a1),d1    *添え字
  2031.     cmpi.w    #3-1,d1
  2032.     bhi    mz_illegal_arry        *配列のサイズが違う
  2033.     lea    dim1_data(a1),a1    *a1=data pointer
  2034.     moveq.l    #-1,d3
  2035.     tst.w    par2(sp)
  2036.     bmi    @f
  2037.     move.l    par2+val(sp),d3    *get dev id
  2038. @@:
  2039.     lea    mt32_rvb_(pc),a0
  2040.     bsr    wrt_str
  2041.     move.l    d3,d0
  2042.     bmi    @f
  2043.     bsr    wrt_num3    *dev id
  2044. @@:
  2045.     move.w    #' {',d0
  2046.     bsr    do_wrt_zms_w
  2047. @@:
  2048.     moveq.l    #0,d0
  2049.     move.b    (a1)+,d0
  2050.     bsr    wrt_num
  2051.     tst.w    d1
  2052.     bne    1f
  2053.     moveq    #'}',d0
  2054.     bsr    do_wrt_zms_b
  2055.     bra    2f
  2056. 1:
  2057.     moveq    #',',d0
  2058.     bsr    do_wrt_zms_b
  2059. 2:
  2060.     dbra    d1,@b
  2061.     bsr    compile_zms
  2062.     bra    ok_0
  2063.  
  2064. mt32_pst:            *V2 MT32パートMIDIチャンネル設定
  2065.     bsr    check_zm3
  2066.     movea.l    par1+val(sp),a1
  2067.     move.w    dim1(a1),d1
  2068.     cmpi.w    #9-1,d1
  2069.     bhi    mz_illegal_arry        *配列のサイズが違う
  2070.     lea    dim1_data(a1),a1    *a1=data pointer
  2071.     moveq.l    #-1,d3
  2072.     tst.w    par2(sp)
  2073.     bmi    @f
  2074.     move.l    par2+val(sp),d3    *get dev id
  2075. @@:
  2076.     lea    mt32_pst_(pc),a0
  2077.     bsr    wrt_str
  2078.     move.l    d3,d0
  2079.     bmi    @f
  2080.     bsr    wrt_num3    *dev id
  2081. @@:
  2082.     move.w    #' {',d0
  2083.     bsr    do_wrt_zms_w
  2084. @@:
  2085.     moveq.l    #0,d0
  2086.     move.b    (a1)+,d0
  2087.     bsr    wrt_num
  2088.     tst.w    d1
  2089.     bne    1f
  2090.     moveq    #'}',d0
  2091.     bsr    do_wrt_zms_b
  2092.     bra    2f
  2093. 1:
  2094.     moveq    #',',d0
  2095.     bsr    do_wrt_zms_b
  2096. 2:
  2097.     dbra    d1,@b
  2098.     bsr    compile_zms
  2099.     bra    ok_0
  2100.  
  2101. mt32_dst:            *V2 mt32ドラムセットアップ設定
  2102.     bsr    check_zm3
  2103.     move.l    par1+val(sp),d1    *note number
  2104.     movea.l    par2+val(sp),a1
  2105.     move.w    dim1(a1),d2        *添え字
  2106.     cmpi.w    #4-1,d2
  2107.     bhi    mz_illegal_arry        *配列のサイズが違う
  2108.     lea    dim1_data(a1),a1    *a1=data pointer
  2109.     moveq.l    #-1,d3
  2110.     tst.w    par3(sp)
  2111.     bmi    @f
  2112.     move.l    par3+val(sp),d3    *get dev id
  2113. @@:
  2114.     lea    mt32_dst_(pc),a0
  2115.     bsr    wrt_str
  2116.     move.l    d1,d0
  2117.     bsr    wrt_num        *note num
  2118.     tst.l    d3
  2119.     bmi    @f
  2120.     moveq    #',',d0
  2121.     bsr    do_wrt_zms_b
  2122.     move.l    d3,d0
  2123.     bsr    wrt_num3    *dev id
  2124. @@:
  2125.     move.w    #' {',d0
  2126.     bsr    do_wrt_zms_w
  2127. @@:
  2128.     moveq.l    #0,d0
  2129.     move.b    (a1)+,d0
  2130.     bsr    wrt_num
  2131.     tst.w    d2
  2132.     bne    1f
  2133.     moveq    #'}',d0
  2134.     bsr    do_wrt_zms_b
  2135.     bra    2f
  2136. 1:
  2137.     moveq    #',',d0
  2138.     bsr    do_wrt_zms_b
  2139. 2:
  2140.     dbra    d2,@b
  2141.     bsr    compile_zms
  2142.     bra    ok_0
  2143.  
  2144. mt32_cmn:            *V2 MT32音色コモンパラメータ設定
  2145.     bsr    check_zm3
  2146.     move.l    par1+val(sp),d1        *timbre number
  2147.     movea.l    par2+val(sp),a3        *name address
  2148.     tst.b    (a3)
  2149.     beq    mz_nul_string_error
  2150.     movea.l    par3+val(sp),a1
  2151.     move.w    dim1(a1),d2    *添え字
  2152.     cmpi.w    #4-1,d2
  2153.     bhi    mz_illegal_arry        *配列のサイズが違う
  2154.     lea    dim1_data(a1),a1    *a1=data pointer
  2155.     moveq.l    #-1,d3
  2156.     tst.w    par4(sp)
  2157.     bmi    @f
  2158.     move.l    par4+val(sp),d3    *get dev id
  2159. @@:
  2160.     lea    mt32_cmn_(pc),a0
  2161.     bsr    wrt_str
  2162.     move.l    d1,d0
  2163.     bsr    wrt_num        *timbre num
  2164.     tst.l    d3
  2165.     bmi    @f
  2166.     moveq    #',',d0
  2167.     bsr    do_wrt_zms_b
  2168.     move.l    d3,d0
  2169.     bsr    wrt_num3    *dev id
  2170. @@:
  2171.     move.l    #' { "',d0
  2172.     bsr    do_wrt_zms_l
  2173. @@:
  2174.     move.l    a3,a0
  2175.     bsr    wrt_str
  2176.     move.w    #'",',d0
  2177.     bsr    do_wrt_zms_w
  2178. @@:
  2179.     moveq.l    #0,d0
  2180.     move.b    (a1)+,d0
  2181.     bsr    wrt_num
  2182.     tst.w    d2
  2183.     bne    1f
  2184.     moveq    #'}',d0
  2185.     bsr    do_wrt_zms_b
  2186.     bra    2f
  2187. 1:
  2188.     moveq    #',',d0
  2189.     bsr    do_wrt_zms_b
  2190. 2:
  2191.     dbra    d2,@b
  2192.     bsr    compile_zms
  2193.     bra    ok_0
  2194.  
  2195. mt32_ptch:            *V2 mt32パッチパラメータ設定
  2196.     bsr    check_zm3
  2197.     move.l    par1+val(sp),d1    *patch number
  2198.     movea.l    par2+val(sp),a1
  2199.     move.w    dim1(a1),d2    *添え字
  2200.     cmpi.w    #7-1,d2
  2201.     bhi    mz_illegal_arry        *配列のサイズが違う
  2202.     lea    dim1(a1),a1    *a1=data pointer
  2203.     moveq.l    #-1,d3
  2204.     tst.w    par3(sp)
  2205.     bmi    @f
  2206.     move.l    par3+val(sp),d3    *get dev id
  2207. @@:
  2208.     lea    mt32_ptch_(pc),a0
  2209.     bsr    wrt_str
  2210.     move.l    d1,d0
  2211.     bsr    wrt_num        *patch num
  2212.     tst.l    d3
  2213.     bmi    @f
  2214.     moveq    #',',d0
  2215.     bsr    do_wrt_zms_b
  2216.     move.l    d3,d0
  2217.     bsr    wrt_num3    *dev id
  2218. @@:
  2219.     move.w    #' {',d0
  2220.     bsr    do_wrt_zms_w
  2221. @@:
  2222.     moveq.l    #0,d0
  2223.     move.b    (a1)+,d0
  2224.     bsr    wrt_num
  2225.     tst.w    d2
  2226.     bne    1f
  2227.     moveq    #'}',d0
  2228.     bsr    do_wrt_zms_b
  2229.     bra    2f
  2230. 1:
  2231.     moveq    #',',d0
  2232.     bsr    do_wrt_zms_b
  2233. 2:
  2234.     dbra    d2,@b
  2235.     bsr    compile_zms
  2236.     bra    ok_0
  2237.  
  2238. mt32_prtl:            *V2 mt32音色パーシャルパラメータ設定
  2239.     bsr    check_zm3
  2240.     move.l    par1+val(sp),d0    *timbre number
  2241.     move.l    par2+val(sp),d1    *name address
  2242.     movea.l    par3+val(sp),a1
  2243.     move.w    dim1(a1),d2        *添え字
  2244.     cmpi.w    #58-1,d2
  2245.     bhi    mz_illegal_arry        *配列のサイズが違う
  2246.     lea    dim1(a1),a1        *a1=data pointer
  2247.     moveq.l    #-1,d3
  2248.     tst.w    par4(sp)
  2249.     bmi    @f
  2250.     move.l    par4+val(sp),d3    *get dev id
  2251. @@:
  2252.     lea    mt32_prtl_(pc),a0
  2253.     bsr    wrt_str
  2254.     bsr    wrt_num        *timbre number
  2255.     moveq    #',',d0
  2256.     bsr    do_wrt_zms_b
  2257.     move.l    d1,d0
  2258.     bsr    wrt_num        *partial number
  2259.     tst.l    d3
  2260.     bmi    @f
  2261.     moveq    #',',d0
  2262.     bsr    do_wrt_zms_b
  2263.     move.l    d3,d0
  2264.     bsr    wrt_num3    *dev id
  2265. @@:
  2266.     move.l    #' {'*65536+$0d0a,d0
  2267.     bsr    do_wrt_zms_l
  2268.     lea    rem4(pc),a0
  2269.     bsr    wrt_str
  2270.     moveq    #9,d0        *tab
  2271.     bsr    do_wrt_zms_b
  2272.     moveq.l    #0,d1
  2273. prtllp:
  2274.     moveq.l    #0,d0
  2275.     move.b    (a1)+,d0
  2276.     bsr    wrt_num2
  2277.     addq.b    #1,d1
  2278.  
  2279.     cmpi.b    #8,d1
  2280.     bne    @f
  2281.     lea    rem5(pc),a0
  2282.     bsr    wrt_str
  2283.     moveq    #9,d0        *tab
  2284.     bsr    do_wrt_zms_b
  2285.     bra    1f
  2286. @@:
  2287.     cmpi.b    #$14,d1
  2288.     bne    @f
  2289.     lea    rem6(pc),a0
  2290.     bsr    wrt_str
  2291.     moveq    #9,d0        *tab
  2292.     bsr    do_wrt_zms_b
  2293.     bra    1f
  2294. @@:
  2295.     cmpi.b    #$17,d1
  2296.     bne    @f
  2297.     lea    rem7(pc),a0
  2298.     bsr    wrt_str
  2299.     moveq    #9,d0        *tab
  2300.     bsr    do_wrt_zms_b
  2301.     bra    1f
  2302. @@:
  2303.     cmpi.b    #$1C,d1
  2304.     bne    @f
  2305.     lea    rem8(pc),a0
  2306.     bsr    wrt_str
  2307.     moveq    #9,d0        *tab
  2308.     bsr    do_wrt_zms_b
  2309.     bra    1f
  2310. @@:
  2311.     cmpi.b    #$29,d1
  2312.     bne    @f
  2313.     lea    rem9(pc),a0
  2314.     bsr    wrt_str
  2315.     moveq    #9,d0        *tab
  2316.     bsr    do_wrt_zms_b
  2317.     bra    1f
  2318. @@:
  2319.     cmpi.b    #$2f,d1
  2320.     bne    @f
  2321.     lea    rem10(pc),a0
  2322.     bsr    wrt_str
  2323.     moveq    #9,d0        *tab
  2324.     bsr    do_wrt_zms_b
  2325.     bra    1f
  2326. @@:
  2327.     tst.w    d2
  2328.     bne    @f
  2329.     moveq.l    #',',d0
  2330.     bsr    do_wrt_zms_b
  2331.     bra    1f
  2332. @@:
  2333.     moveq.l    #'}',d0        *最後
  2334.     bsr    do_wrt_zms_b
  2335. 1:
  2336.     dbra    d2,prtllp
  2337.     bsr    compile_zms
  2338.     bra    ok_0
  2339.  
  2340. mt32_prt:            *V2 MT32に文字列を表示する
  2341.     bsr    check_zm3
  2342.     lea    mt32_prt_(pc),a0
  2343.     bsr    wrt_str
  2344.     tst.w    par2(sp)        *dev id省略?
  2345.     bmi    @f
  2346.     move.l    par2+val(sp),d0
  2347.     bsr    wrt_num3        *dev id
  2348. @@:
  2349.     move.w    #' "',d0
  2350.     bsr    do_wrt_zms_w
  2351.     move.l    par1+val(sp),a0
  2352.     tst.b    (a0)
  2353.     beq    mz_nul_string_error    *length=0は駄目
  2354.     bsr    wrt_str
  2355.     moveq    #'"',d0
  2356.     bsr    do_wrt_zms_b
  2357.     bsr    compile_zms
  2358.     bra    ok_0
  2359.  
  2360. u220_setup:            *V2 u220セットアップパラメータの設定
  2361.     bsr    check_zm3
  2362.     movea.l    par1+val(sp),a1
  2363.     cmpi.w    #7-1,dim1(a1)
  2364.     bne    mz_illegal_arry        *配列のサイズが違う
  2365.     lea    dim1_data(a1),a1    *a1=data pointer
  2366.     moveq.l    #-1,d3
  2367.     tst.w    par2(sp)
  2368.     bmi    @f
  2369.     move.l    par2+val(sp),d3        *get dev id
  2370. @@:
  2371.     lea    u220_setup_(pc),a0
  2372.     bsr    wrt_str
  2373.     move.l    d3,d0
  2374.     bmi    @f
  2375.     bsr    wrt_num3        *dev id
  2376. @@:
  2377.     move.w    #' {',d0
  2378.     bsr    do_wrt_zms_w
  2379.     moveq.l    #7-1,d1
  2380. @@:
  2381.     moveq.l    #0,d0
  2382.     move.b    (a1)+,d0
  2383.     bsr    wrt_num
  2384.     tst.w    d1
  2385.     beq    1f
  2386.     moveq    #',',d0
  2387.     bsr    do_wrt_zms_b
  2388.     bra    2f
  2389. 1:
  2390.     moveq.l    #'}',d0
  2391.     bsr    do_wrt_zms_b
  2392. 2:
  2393.     dbra    d1,@b
  2394.     bsr    compile_zms
  2395.     bra    ok_0
  2396.  
  2397. u220_pst:            *V2 u220テンポラリパート・セットアップパラメータ設定
  2398.     bsr    check_zm3
  2399.     move.l    par1+val(sp),d1    *part number
  2400.     movea.l    par2+val(sp),a1
  2401.     move.w    dim1(a1),d2        *添え字
  2402.     cmpi.w    #13-1,d2
  2403.     bne    mz_illegal_arry        *配列のサイズが違う
  2404.     lea    dim1_data(a1),a1    *a1=data pointer
  2405.     moveq.l    #-1,d3
  2406.     tst.w    par3(sp)
  2407.     bmi    @f
  2408.     move.l    par3+val(sp),d3    *get dev id
  2409. @@:
  2410.     lea    u220_pst_(pc),a0
  2411.     bsr    wrt_str
  2412.     move.l    d1,d0
  2413.     bsr    wrt_num        *patch num
  2414.     tst.l    d3
  2415.     bmi    @f
  2416.     moveq    #',',d0
  2417.     bsr    do_wrt_zms_b
  2418.     move.l    d3,d0
  2419.     bsr    wrt_num3    *dev id
  2420. @@:
  2421.     move.w    #' {',d0
  2422.     bsr    do_wrt_zms_w
  2423. @@:
  2424.     moveq.l    #0,d0
  2425.     move.b    (a1)+,d0
  2426.     bsr    wrt_num
  2427.     tst.w    d2
  2428.     beq    1f
  2429.     moveq    #',',d0
  2430.     bsr    do_wrt_zms_b
  2431.     bra    2f
  2432. 1:
  2433.     moveq    #'}',d0
  2434.     bsr    do_wrt_zms_b
  2435. 2:
  2436.     dbra    d2,@b
  2437.     bsr    compile_zms
  2438.     bra    ok_0
  2439.  
  2440. u220_cmn:            *V2 u220テンポラリパッチ・コモンパラメータの設定
  2441.     bsr    check_zm3
  2442.     movea.l    par1+val(sp),a1
  2443.     cmpi.w    #18-1,dim1(a1)
  2444.     bne    mz_illegal_arry        *配列のサイズが違う
  2445.     lea    dim1_data(a1),a1    *a1=data pointer
  2446.     moveq.l    #-1,d3
  2447.     tst.w    par2(sp)
  2448.     bmi    @f
  2449.     move.l    par2+val(sp),d3        *get dev id
  2450. @@:
  2451.     lea    u220_cmn_(pc),a0
  2452.     bsr    wrt_str
  2453.     move.l    d3,d0
  2454.     bmi    @f
  2455.     bsr    wrt_num3        *dev id
  2456. @@:
  2457.     move.w    #' {',d0
  2458.     bsr    do_wrt_zms_w
  2459.     moveq.l    #18-1,d1
  2460. @@:
  2461.     moveq.l    #0,d0
  2462.     move.b    (a1)+,d0
  2463.     bsr    wrt_num
  2464.     tst.w    d1
  2465.     beq    1f
  2466.     move.b    #',',d0
  2467.     bsr    do_wrt_zms_b
  2468.     bra    2f
  2469. 1:
  2470.     moveq    #'}',d0
  2471.     bsr    do_wrt_zms_b
  2472. 2:
  2473.     dbra    d1,@b
  2474.     bsr    compile_zms
  2475.     bra    ok_0
  2476.  
  2477. u220_tmb:            *V2 U220音色パラメータ設定
  2478.     bsr    check_zm3
  2479.     move.l    par1+val(sp),d1        *timbre number
  2480.     movea.l    par2+val(sp),a3        *name address
  2481.     tst.b    (a3)
  2482.     beq    mz_nul_string_error
  2483.     movea.l    par3+val(sp),a1
  2484.     move.w    dim1(a1),d2        *添え字
  2485.     cmpi.w    #26-1,d2
  2486.     bne    mz_illegal_arry        *配列のサイズが違う
  2487.     lea    dim1_data(a1),a1    *a1=data pointer
  2488.     moveq.l    #-1,d3
  2489.     tst.w    par4(sp)
  2490.     bmi    @f
  2491.     move.l    par4+val(sp),d3        *get dev id
  2492. @@:
  2493.     lea    u220_tmb_(pc),a0
  2494.     bsr    wrt_str
  2495.     move.l    d1,d0
  2496.     bsr    wrt_num            *timbre num
  2497.     tst.l    d3
  2498.     bmi    @f
  2499.     moveq    #',',d0
  2500.     bsr    do_wrt_zms_b
  2501.     move.l    d3,d0
  2502.     bsr    wrt_num3    *dev id
  2503. @@:
  2504.     move.w    #' {',d0
  2505.     bsr    do_wrt_zms_w
  2506.     move.l    a3,a0
  2507.     bsr    wrt_str
  2508.     move.w    #$0d0a,d0
  2509.     bsr    do_wrt_zms_w
  2510.     lea    rem11(pc),a0
  2511.     bsr    wrt_str
  2512.     moveq    #9,d0
  2513.     bsr    do_wrt_zms_b
  2514.     moveq.l    #0,d1
  2515. tmblp:
  2516.     moveq.l    #0,d0
  2517.     move.b    (a1)+,d0
  2518.     bsr    wrt_num2
  2519.     addq.b    #1,d1
  2520.     cmpi.b    #9,d1
  2521.     bne    @f
  2522.     lea    rem12(pc),a0
  2523.     bsr    wrt_str
  2524.     moveq    #9,d0
  2525.     bsr    do_wrt_zms_b
  2526.     bra    2f
  2527. @@:
  2528.     cmpi.b    #18,d1
  2529.     bne    @f
  2530.     lea    rem13(pc),a0
  2531.     bsr    wrt_str
  2532.     moveq    #9,d0
  2533.     bsr    do_wrt_zms_b
  2534.     bra    2f
  2535. @@:
  2536.     tst.w    d2
  2537.     beq    1f
  2538.     moveq    #',',d0
  2539.     bsr    do_wrt_zms_b
  2540.     bra    2f
  2541. 1:
  2542.     moveq    #'}',d0
  2543.     bsr    do_wrt_zms_b
  2544. 2:
  2545.     dbra    d2,tmblp
  2546.     bsr    compile_zms
  2547.     bra    ok_0
  2548.  
  2549. u220_dst:            *V2 u220テンポラリ・ドラム・セットアップパラメータの設定
  2550.     bsr    check_zm3
  2551.     movea.l    par1+val(sp),a1
  2552.     cmpi.w    #7-1,dim1(a1)
  2553.     bne    mz_illegal_arry        *配列のサイズが違う
  2554.     lea    dim1_data(a1),a1    *a1=data pointer
  2555.     moveq.l    #-1,d3
  2556.     tst.w    par2(sp)
  2557.     bmi    @f
  2558.     move.l    par2+val(sp),d3        *get dev id
  2559. @@:
  2560.     lea    u220_dst_(pc),a0
  2561.     bsr    wrt_str
  2562.     move.l    d3,d0
  2563.     bmi    @f
  2564.     bsr    wrt_num3        *dev id
  2565. @@:
  2566.     move.w    #' {',d0
  2567.     bsr    do_wrt_zms_w
  2568.     moveq.l    #7-1,d1
  2569. @@:
  2570.     moveq.l    #0,d0
  2571.     move.b    (a1)+,d0
  2572.     bsr    wrt_num
  2573.     tst.w    d1
  2574.     beq    1f
  2575.     moveq.l    #',',d0
  2576.     bsr    do_wrt_zms_b
  2577.     bra    2f
  2578. 1:
  2579.     moveq    #'}',d0
  2580.     bsr    do_wrt_zms_b
  2581. 2:
  2582.     dbra    d1,@b
  2583.     bsr    compile_zms
  2584.     bra    ok_0
  2585.  
  2586. u220_dis:            *V2 u220ドラムインストパラメータ設定
  2587.     bsr    check_zm3
  2588.     move.l    par1+val(sp),d1    *note number
  2589.     movea.l    par2+val(sp),a1
  2590.     move.w    dim1(a1),d2        *添え字
  2591.     cmpi.w    #20-1,d2
  2592.     bhi    mz_illegal_arry        *配列のサイズが違う
  2593.     lea    dim1_data(a1),a1    *a1=data pointer
  2594.     moveq.l    #-1,d3
  2595.     tst.w    par3(sp)
  2596.     bmi    @f
  2597.     move.l    par3+val(sp),d3        *get dev id
  2598. @@:
  2599.     lea    u220_dis_(pc),a0
  2600.     bsr    wrt_str
  2601.     move.l    d1,d0
  2602.     bsr    wrt_num        *note num
  2603.     tst.l    d3
  2604.     bmi    @f
  2605.     moveq.l    #',',d0
  2606.     bsr    do_wrt_zms_b
  2607.     move.l    d3,d0
  2608.     bsr    wrt_num3    *dev id
  2609. @@:
  2610.     move.w    #' {',d0
  2611.     bsr    do_wrt_zms_w
  2612. @@:
  2613.     moveq.l    #0,d0
  2614.     move.b    (a1)+,d0
  2615.     bsr    wrt_num
  2616.     tst.w    d2
  2617.     beq    1f
  2618.     moveq    #',',d0
  2619.     bsr    do_wrt_zms_b
  2620.     bra    2f
  2621. 1:
  2622.     moveq    #'}',d0
  2623.     bsr    do_wrt_zms_b
  2624. 2:
  2625.     dbra    d2,@b
  2626.     bsr    compile_zms
  2627.     bra    ok_0
  2628.  
  2629. u220_prt:            *V2 U220に文字列を表示する
  2630.     bsr    check_zm3
  2631.     lea    u220_prt_(pc),a0
  2632.     bsr    wrt_str
  2633.     tst.w    par2(sp)        *dev id省略?
  2634.     bmi    @f
  2635.     move.l    par2+val(sp),d0
  2636.     bsr    wrt_num3        *dev id
  2637. @@:
  2638.     move.w    #' "',d0
  2639.     bsr    do_wrt_zms_w
  2640.     move.l    par1+val(sp),a0
  2641.     tst.b    (a0)
  2642.     beq    mz_nul_string_error    *length=0は駄目
  2643.     bsr    wrt_str
  2644.     moveq    #'"',d0
  2645.     bsr    do_wrt_zms_b
  2646.     bsr    compile_zms
  2647.     bra    ok_0
  2648.  
  2649. m1_mdch:            *V2 M1 SONG0のMIDIチャンネル設定
  2650.     bsr    check_zm3
  2651.     movea.l    par1+val(sp),a1
  2652.     cmpi.w    #8-1,dim1(a1)
  2653.     bne    mz_illegal_arry        *配列のサイズが違う
  2654.     lea    dim1_data(a1),a1    *a1=data pointer
  2655.     lea    m1_mdch_(pc),a0
  2656.     bsr    wrt_str
  2657.     moveq.l    #8-1,d1
  2658. @@:
  2659.     moveq.l    #0,d0
  2660.     move.b    (a1)+,d0
  2661.     bsr    wrt_num
  2662.     tst.w    d1
  2663.     beq    1f
  2664.     moveq    #',',d0
  2665.     bsr    do_wrt_zms_b
  2666.     bra    2f
  2667. 1:
  2668.     moveq    #'}',d0
  2669.     bsr    do_wrt_zms_b
  2670. 2:
  2671.     dbra    d1,@b
  2672.     bsr    compile_zms
  2673.     bra    ok_0
  2674.  
  2675. m1_ptst:            *V2 M1 SONG0のパートパラメータ設定
  2676.     bsr    check_zm3
  2677.     movea.l    par1+val(sp),a1
  2678.     cmpi.w    #40-1,dim1(a1)
  2679.     bne    mz_illegal_arry        *配列のサイズが違う
  2680.     lea    dim1_data(a1),a1    *a1=data pointer
  2681.     lea    rem14(pc),a0
  2682.     bsr    wrt_str
  2683.     move.w    #'1'*256+9,d0
  2684.     bsr    do_wrt_zms_w
  2685.     moveq    #9,d0
  2686.     bsr    do_wrt_zms_b
  2687.     lea    rem15(pc),a0
  2688.     bsr    wrt_str
  2689.     lea    m1_ptst_(pc),a0
  2690.     bsr    wrt_str
  2691.     moveq.l    #40-1,d1
  2692.     moveq.l    #2,d2
  2693.     moveq.l    #6,d3
  2694. m1ptst_lp:
  2695.     moveq.l    #0,d0
  2696.     move.b    (a1)+,d0
  2697.     bsr    wrt_num2
  2698.     tst.w    d1
  2699.     bne    @f
  2700.     moveq.l    #'}',d0
  2701.     bsr    do_wrt_zms_b
  2702.     bra    1f
  2703. @@:
  2704.     subq.b    #1,d3
  2705.     bne    @f
  2706.     moveq.l    #5,d3
  2707.     move.w    #$0d0a,d0
  2708.     bsr    do_wrt_zms_w
  2709.     lea    rem14(pc),a0
  2710.     bsr    wrt_str
  2711.     move.l    d2,d0
  2712.     bsr    wrt_num
  2713.     addq.b    #1,d2
  2714.     move.w    #$0909,d0
  2715.     bsr    do_wrt_zms_w
  2716.     lea    rem15(pc),a0
  2717.     bsr    wrt_str
  2718.     move.w    #$0909,d0
  2719.     bsr    do_wrt_zms_w
  2720.     bra    1f
  2721. @@:
  2722.     moveq.l    #',',d0
  2723.     bsr    do_wrt_zms_b
  2724. 1:
  2725.     dbra    d1,m1ptst_lp
  2726.     bsr    compile_zms
  2727.     bra    ok_0
  2728.  
  2729. m1_effect:            *V2 M1 SONG0のエフェクトパラメータ設定
  2730.     bsr    check_zm3
  2731.     movea.l    par1+val(sp),a1
  2732.     cmpi.w    #25-1,dim1(a1)
  2733.     bne    mz_illegal_arry        *配列のサイズが違う
  2734.     lea    dim1_data(a1),a1    *a1=data pointer
  2735.     lea    m1_efct_(pc),a0
  2736.     bsr    wrt_str
  2737.     moveq.l    #25-1,d1
  2738. @@:
  2739.     moveq.l    #0,d0
  2740.     move.b    (a1)+,d0
  2741.     bsr    wrt_num
  2742.     tst.w    d1
  2743.     beq    1f
  2744.     moveq    #',',d0
  2745.     bsr    do_wrt_zms_b
  2746.     bra    2f
  2747. 1:
  2748.     moveq    #'}',d0
  2749.     bsr    do_wrt_zms_b
  2750. 2:
  2751.     dbra    d1,@b
  2752.     bsr    compile_zms
  2753.     bra    ok_0
  2754.  
  2755. m1_prt:                *V2 M1 SONG0のソングネーム設定
  2756.     bsr    check_zm3
  2757.     lea    m1_prt_(pc),a0
  2758.     bsr    wrt_str
  2759.     move.l    par1+val(sp),a0
  2760.     tst.b    (a0)
  2761.     beq    mz_nul_string_error    *length=0は駄目
  2762.     bsr    wrt_str
  2763.     moveq    #'"',d0
  2764.     bsr    do_wrt_zms_b
  2765.     bsr    compile_zms
  2766.     bra    ok_0
  2767.  
  2768. send_m1:            *V2 M1へ送信
  2769.     bsr    check_zm3
  2770.     moveq.l    #-1,d3
  2771.     tst.w    par1(sp)
  2772.     bmi    @f
  2773.     move.l    par1+val(sp),d3    *get dev id
  2774. @@:
  2775.     lea    send_m1_(pc),a0
  2776.     bsr    wrt_str
  2777.     tst.l    d3
  2778.     bmi    @f
  2779.     moveq    #' ',d0
  2780.     bsr    do_wrt_zms_b
  2781.     move.l    d3,d0
  2782.     bsr    wrt_num3    *dev id
  2783. @@:
  2784.     bsr    compile_zms
  2785.     bra    ok_0
  2786.  
  2787. zmd_play:            *V2 ブロックデータの読み込み
  2788.     bsr    check_zm3
  2789.     lea    filename(pc),a2
  2790.     move.l    par1+val(sp),a1    *a1=file name
  2791.     clr.b    d1
  2792. zmdplp01:                *ファイルネームのゲット
  2793.     move.b    (a1)+,d0
  2794.     cmpi.b    #'.',d0
  2795.     bne    @f
  2796.     st.b    d1        *MARK
  2797. @@:
  2798.     cmpi.b    #' ',d0
  2799.     bls    @f
  2800.     move.b    d0,(a2)+
  2801.     bra    zmdplp01
  2802. @@:
  2803.     tst.b    d1
  2804.     bne    @f
  2805.     move.b    #'.',(a2)+    *拡張子をセット
  2806.     move.b    #'Z',(a2)+
  2807.     move.b    #'M',(a2)+
  2808.     move.b    #'D',(a2)+
  2809. @@:
  2810.     clr.b    (a2)            *end code
  2811.     lea    filename(pc),a2
  2812.     bsr    fopen            *< a2=filename
  2813.     tst.l    d5
  2814.     bmi    mz_file_open_error    *read error
  2815.     bsr    read            *return=a5:address,d3:size
  2816.     bsr    self_output
  2817.     bra    ok_0
  2818.  
  2819.     .include    fopen.has
  2820.  
  2821. m_debug:            *V2 [!]コマンドの有効/無効化
  2822.     bsr    check_zm3
  2823.     move.w    #'(d',d0
  2824.     bsr    do_wrt_zms_w
  2825.     move.l    par1+val(sp),d0
  2826.     bsr    wrt_num
  2827.     moveq    #')',d0
  2828.     bsr    do_wrt_zms_b
  2829.     bsr    compile_zms
  2830.     bra    ok_0
  2831.  
  2832. m_count:            *V2 全音符の絶対音長の設定
  2833.     bsr    check_zm3
  2834.     move.w    #'(z',d0
  2835.     bsr    do_wrt_zms_w
  2836.     move.l    par1+val(sp),d0
  2837.     bsr    wrt_num
  2838.     moveq    #')',d0
  2839.     bsr    do_wrt_zms_b
  2840.     bsr    compile_zms
  2841.     bra    ok_0
  2842.  
  2843. fm_master:            *V2 FM音源の出力バランス設定
  2844.     bsr    check_zm3
  2845.     lea    fm_mstr_(pc),a0
  2846.     bsr    wrt_str
  2847.     move.l    par1+val(sp),d0
  2848.     bsr    wrt_num
  2849.     bsr    compile_zms
  2850.     bra    ok_0
  2851.  
  2852. m_mute:                *V2 任意トラックのマスク
  2853.     bsr    check_zm3
  2854.     lea    par1(sp),a3
  2855.     tst.w    (a3)        *全省略ならば初期化
  2856.     bmi    reset_mask
  2857.     moveq.l    #-1,d3
  2858.     bsr    get_mask_trk
  2859.     Z_MUSIC    #ZM_MASK_TRACKS
  2860.     tst.l    d0
  2861.     bne    error
  2862.     bra    ok_0
  2863.  
  2864. m_solo:                *V2 任意トラックのマスク解除
  2865.     bsr    check_zm3
  2866.     lea    par1(sp),a3
  2867.     tst.w    (a3)        *全省略ならば初期化
  2868.     bmi    reset_mask
  2869.     moveq.l    #0,d3
  2870.     bsr    get_mask_trk
  2871.     Z_MUSIC    #ZM_MASK_TRACKS
  2872.     tst.l    d0
  2873.     bne    error
  2874.     bra    ok_0
  2875.  
  2876. reset_mask:
  2877.     moveq.l    #0,d1
  2878.     move.l    d1,a1
  2879.     Z_MUSIC    #ZM_MASK_TRACKS
  2880.     tst.l    d0
  2881.     bne    error
  2882.     bra    ok_0
  2883.  
  2884. get_mask_trk:            *トラック番号を取得してテーブルへ
  2885.     * < a3.l=par1(sp)
  2886.     * < d3.w=mode
  2887.     * > a1.l=trk_cmd
  2888.     * - all
  2889. reglist    reg    d1-d2/a0
  2890.     movem.l    reglist,-(sp)
  2891.     lea    trk_cmd(pc),a0
  2892.     move.l    a0,a1
  2893.     moveq.l    #0,d2
  2894. gmt_lp:
  2895.     tst.w    (a3)
  2896.     bmi    @f        *no more value
  2897.     move.l    val(a3),d1
  2898.     subq.l    #1,d1
  2899.     cmpi.l    #tr_max-1,d1
  2900.     bhi    mz_illegal_track_number
  2901.     move.w    d1,(a0)+    *track
  2902.     move.w    d3,(a0)+    *mode
  2903.     addq.w    #1,d2
  2904.     cmpi.w    #128,d2
  2905.     bhi    mz_too_many_tracks
  2906.     add.w    #next_par,a3        *次へ
  2907.     bra    gmt_lp
  2908. @@:
  2909.     move.w    #-1,(a0)+    *endcode
  2910.     movem.l    (sp)+,reglist
  2911.     rts
  2912.  
  2913. m_wave_form:            *V2 波形メモリセット
  2914.     bsr    check_zm3
  2915.     lea    wvfm_(pc),a0
  2916.     bsr    wrt_str
  2917.     move.l    par1+val(sp),d0    *波形番号
  2918.     bsr    wrt_num
  2919.     moveq    #',',d0
  2920.     bsr    do_wrt_zms_b
  2921.     move.l    par2+val(sp),d0    *ループタイプ
  2922.     bsr    wrt_num
  2923.     moveq.l    #0,d0
  2924.     tst.w    par3(sp)
  2925.     bmi    @f
  2926.     moveq    #',',d0
  2927.     bsr    do_wrt_zms_b
  2928.     move.l    par3+val(sp),d0    *ループポイント
  2929. @@:
  2930.     bsr    wrt_num        *write loop point
  2931.     move.l    par4+val(sp),a1
  2932.     addq.w    #dim1,a1
  2933.     move.w    (a1)+,d2    *添え字をゲット
  2934.     addq.w    #1,d2        *データカウントにする
  2935.     move.w    #' {',d0
  2936.     bsr    do_wrt_zms_w
  2937.     moveq.l    #0,d1
  2938. wvf_lp01:
  2939.     move.l    (a1)+,d0
  2940.     bsr    wrt_num
  2941.     subq.w    #1,d2
  2942.     beq    mwf_owari
  2943.     addq.w    #1,d1
  2944.     cmp.l    #16,d1        *16個おきに改行
  2945.     bcs    @f
  2946.     moveq.l    #0,d1
  2947.     move.l    #$0d0a_0909,d0
  2948.     bsr    do_wrt_zms_l
  2949.     bra    wvf_lp01
  2950. @@:
  2951.     moveq    #',',d0
  2952.     bsr    do_wrt_zms_b
  2953.     bra    wvf_lp01
  2954. mwf_owari:
  2955.     moveq    #'}',d0
  2956.     bsr    do_wrt_zms_b
  2957.     bsr    compile_zms
  2958.     bra    ok_0
  2959.  
  2960. adpcm_to_pcm:                *V2 ADPCM→PCM変換
  2961.     bsr    check_zm3
  2962.     movea.l    par1+val(sp),a1        *配列
  2963.     moveq.l    #0,d0
  2964.     move.w    dim1(a1),d0
  2965.     addq.l    #1,d0            *size
  2966.     lea    dim1_data(a1),a1
  2967.     tst.w    par2(sp)
  2968.     bmi    @f            *省略のケース
  2969.     move.l    par2+val(sp),d1        *get size
  2970.     beq    mz_illegal_parameter
  2971.     cmp.l    d0,d1
  2972.     bhi    mz_illegal_parameter    *サイズが添え字より大きい!?
  2973.     move.l    d1,d2            *d2=変換元のサイズ
  2974. @@:
  2975.     movea.l    par3+val(sp),a2        *配列
  2976.     moveq.l    #0,d1
  2977.     move.w    dim1(a2),d1
  2978.     addq.l    #1,d1            *size
  2979.     lea    dim1_data(a2),a2
  2980.     move.l    d2,d0
  2981.     lsl.l    #1,d0
  2982.     cmp.l    d0,d1
  2983.     bcs    mz_buffer_too_small
  2984.     moveq.l    #0,d1            *ADPCM->PCM
  2985.     Z_MUSIC    #ZM_CONVERT_PCM
  2986.     bra    ok_0
  2987.  
  2988. pcm_to_adpcm:                *V2 PCM→ADPCM変換
  2989.     bsr    check_zm3
  2990.     movea.l    par1+val(sp),a1        *配列
  2991.     moveq.l    #0,d0
  2992.     move.w    dim1(a1),d0
  2993.     addq.l    #1,d0            *size
  2994.     lea    dim1_data(a1),a1
  2995.     tst.w    par2(sp)
  2996.     bmi    @f            *省略のケース
  2997.     move.l    par2+val(sp),d1        *get size
  2998.     beq    mz_illegal_parameter
  2999.     cmp.l    d0,d1
  3000.     bhi    mz_illegal_parameter    *サイズが添え字より大きい!?
  3001.     move.l    d1,d2            *d2=変換元のサイズ
  3002. @@:
  3003.     movea.l    par3+val(sp),a2        *配列
  3004.     moveq.l    #0,d1
  3005.     move.w    dim1(a2),d1
  3006.     addq.l    #1,d1            *size
  3007.     lea    dim1_data(a2),a2
  3008.     move.l    d2,d0
  3009.     lsr.l    #1,d0
  3010.     cmp.l    d0,d1
  3011.     bcs    mz_buffer_too_small
  3012.     moveq.l    #1,d1            *PCM->ADPCM
  3013.     Z_MUSIC    #ZM_CONVERT_PCM
  3014.     bra    ok_0
  3015.  
  3016. exec_zms:                *V2 ZMSコマンド実行
  3017.     bsr    check_zm3
  3018.     move.l    par1+val(sp),a0    *そのまま書き出す
  3019.     bsr    wrt_str
  3020.     bsr    compile_zms
  3021.     bra    ok_0
  3022.  
  3023. zm_ver:                    *V2 ZMUSICバージョン取得
  3024. zm_check_zmsc:                *V3 ZMUSICのバージョン取得
  3025.     bsr    check_zm3
  3026.     moveq.l    #0,d0
  3027.     move.w    zm_ver_buf(pc),d0    *d0.w=version ID
  3028.     bra    ok_ret
  3029.  
  3030. zm_work:            *V3 演奏トラックワーク内容取得
  3031.     bsr    check_zm3
  3032.     move.l    par1+val(sp),d1        *トラック番号(0-65534)
  3033.     Z_MUSIC    #ZM_GET_PLAY_WORK    *a0=trk n seq_wk_tbl
  3034.     move.l    par2+val(sp),d2        *オフセット(0-65535)
  3035.     moveq.l    #0,d0
  3036.     move.b    (a0,d2.l),d0        *d0.b=Work value
  3037.     bra    ok_ret
  3038.  
  3039. zm_exec_zmd:            *V3 ZMD列の実行
  3040.     bsr    check_zm3
  3041.     move.l    par1+val(sp),d1    *track number
  3042.     move.l    par2+val(sp),d2    *size
  3043.     movea.l    par3+val(sp),a1    *zmd
  3044.     Z_MUSIC    #ZM_EXEC_ZMD
  3045.     bra    ok_ret
  3046.  
  3047. zm_assign:            *V3 チャンネルアサイン
  3048.     bsr    check_zm3
  3049.     move.l    par1+val(sp),d1
  3050.     move.l    par2+val(sp),d2
  3051.     Z_MUSIC    #ZM_ASSIGN
  3052.     tst.l    d0
  3053.     bne    error
  3054.     bra    ok_0
  3055.  
  3056. zm_vget:            *V3 音色取りだし
  3057.     bsr    check_zm3
  3058.     move.l    par1+val(sp),d1    *sound number
  3059.     move.l    par2+val(sp),d2    *mode
  3060.     movea.l    par3+val(sp),a1    *配列
  3061.     cmpi.w    #4,dim1(a1)
  3062.     bne    mz_illegal_arry    *配列の次元が違う
  3063.     cmpi.w    #10,dim2(a1)
  3064.     bne    mz_illegal_arry    *配列の次元が違う
  3065.     lea    dim2_data(a1),a1
  3066.     Z_MUSIC    #ZM_VGET
  3067.     tst.l    d0
  3068.     bne    error
  3069.     bra    ok_0
  3070.  
  3071. zm_vset:            *V3 音色登録
  3072.     bsr    check_zm3
  3073.     move.l    par1+val(sp),d1    *sound number
  3074.     move.l    par2+val(sp),d2    *配列
  3075.     movea.l    par3+val(sp),a1    *配列
  3076.     cmpi.w    #4,dim1(a1)
  3077.     bne    mz_illegal_arry    *配列の次元が違う
  3078.     cmpi.w    #10,dim2(a1)
  3079.     bne    mz_illegal_arry
  3080.     lea    dim2_data(a1),a1
  3081.     Z_MUSIC    #ZM_VSET
  3082.     tst.l    d0
  3083.     bne    error
  3084.     bra    ok_0
  3085.  
  3086. zm_tempo            *V3 テンポ
  3087.     bsr    check_zm3
  3088.     move.l    par1+val(sp),d1    *tempo value
  3089.     move.l    par2+val(sp),d2    *tempo mode
  3090.     andi.l    #$ffff,d1
  3091.     swap    d2
  3092.     clr.w    d2
  3093.     or.l    d2,d1
  3094.     Z_MUSIC    #ZM_TEMPO
  3095.     bra    ok_ret            *d0.l=設定前のテンポとタイマ値
  3096.  
  3097. zm_play:                *V3 演奏開始
  3098.     bsr    check_zm3
  3099.     move.l    par1+val(sp),a1
  3100.     lea    dim1_data(a1),a1
  3101.     Z_MUSIC    #ZM_PLAY
  3102.     bra    ok_0
  3103.  
  3104. zm_play_again:                *V3 再演奏
  3105.     Z_MUSIC    #ZM_PLAY_AGAIN
  3106.     bra    ok_0
  3107.  
  3108. zm_play_all:                *V3 全演奏開始
  3109.     bsr    check_zm3
  3110.     suba.l    a1,a1
  3111.     Z_MUSIC    #ZM_PLAY
  3112.     bra    ok_0
  3113.  
  3114. zm_play2:                *V3 再演奏
  3115.     Z_MUSIC    #ZM_PLAY2
  3116.     bra    ok_0
  3117.  
  3118. zm_stop:                *V3 演奏停止
  3119.     bsr    check_zm3
  3120.     move.l    par1+val(sp),a1
  3121.     lea    dim1_data(a1),a1
  3122.     Z_MUSIC    #ZM_STOP
  3123.     bra    ok_0
  3124.  
  3125. zm_stop_all:                *V3 全演奏停止
  3126.     bsr    check_zm3
  3127.     suba.l    a1,a1
  3128.     Z_MUSIC    #ZM_STOP
  3129.     bra    ok_0
  3130.  
  3131. zm_cont:                *V3 演奏再開
  3132.     bsr    check_zm3
  3133.     move.l    par1+val(sp),a1
  3134.     lea    dim1_data(a1),a1
  3135.     Z_MUSIC    #ZM_CONT
  3136.     bra    ok_0
  3137.  
  3138. zm_cont_all:                *V3 全演奏再開
  3139.     bsr    check_zm3
  3140.     suba.l    a1,a1
  3141.     Z_MUSIC    #ZM_CONT
  3142.     bra    ok_0
  3143.  
  3144. zm_play_status_all_ch:            *V3 全チャンネル演奏状態検査
  3145.     bsr    check_zm3
  3146.     moveq.l    #0,d1
  3147.     move.l    par1+val(sp),a1
  3148.     lea    dim1_data(a1),a1
  3149.     Z_MUSIC    #ZM_PLAY_STATUS
  3150.     bra    ok_0
  3151.  
  3152. zm_play_status_ch:            *V3 チャンネル演奏状態検査
  3153.     bsr    check_zm3
  3154.     moveq.l    #2,d1
  3155.     move.l    par1+val(sp),d2
  3156.     Z_MUSIC    #ZM_PLAY_STATUS    *>d0.l=status
  3157.     bra    ok_ret
  3158.  
  3159. zm_play_status_all_tr:            *V3 全トラック演奏状態検査
  3160.     bsr    check_zm3
  3161.     moveq.l    #1,d1
  3162.     move.l    par1+val(sp),a1
  3163.     lea    dim1_data(a1),a1
  3164.     Z_MUSIC    #ZM_PLAY_STATUS
  3165.     bra    ok_0
  3166.  
  3167. zm_play_status_tr:            *V3 トラック演奏状態検査
  3168.     bsr    check_zm3
  3169.     moveq.l    #3,d1
  3170.     move.l    par1+val(sp),d2
  3171.     Z_MUSIC    #ZM_PLAY_STATUS    *>d0.l=status
  3172.     bra    ok_ret
  3173.  
  3174. zm_init:                *V3 初期化
  3175.     bsr    check_zm3        *ドライバがアクティブかどうかチェック
  3176.     move.l    par1+val(sp),d1
  3177.     Z_MUSIC    #ZM_INIT        *>d0.l=Z-MUSICのバージョンID
  3178.     bra    ok_ret
  3179.  
  3180. zm_atoi:                *V3トラックアドレス取得
  3181.     bsr    check_zm3
  3182.     move.l    par1+val(sp),d1        *track number
  3183.     Z_MUSIC    #ZM_ATOI        *>a0.l=指定演奏トラックの先頭アドレス
  3184.     move.l    a0,d0
  3185.     beq    error
  3186.     bra    ok_ret
  3187.  
  3188. zm_set_timer_value:            *V3 タイマ値設定
  3189.     bsr    check_zm3
  3190.     move.l    par1+val(sp),d1        *d1=timer
  3191.     move.l    par2+val(sp),d2        *d2=mode
  3192.     andi.l    #$ffff,d1
  3193.     swap    d2
  3194.     clr.w    d2
  3195.     or.l    d2,d1
  3196.     Z_MUSIC    #ZM_SET_TIMER_VALUE    *>d0.l=設定前のテンポとタイマ値
  3197.     bra    ok_ret
  3198.  
  3199. zm_set_master_clock:            *V3 拍子、メトロノーム速度調号、全音符絶対音長の設定
  3200.     move.l    par1+val(sp),d1        *d1.l=0が音楽,1が効果音
  3201.     move.l    par2+val(sp),a1
  3202.     lea    dim1_data(a1),a1
  3203.     Z_MUSIC    #ZM_SET_MASTER_CLOCK
  3204.     bra    ok_0
  3205.  
  3206. zm_play_zmd:                *V3 ZMDの演奏
  3207.     move.l    par1+val(sp),d2
  3208.     move.l    par2+val(sp),a1
  3209.     lea    dim1_data(a1),a1
  3210.     cmp.l    #ZmuSiC0,(a1)
  3211.     bne    @f
  3212.     addq.w    #8,a1
  3213. @@:
  3214.     Z_MUSIC    #ZM_PLAY_ZMD
  3215.     tst.l    d0
  3216.     bne    error
  3217.     bra    ok_0
  3218.  
  3219. zm_play_zmd_se:                *V3 ZMDの効果音演奏
  3220.     move.l    par1+val(sp),a1
  3221.     lea    dim1_data(a1),a1
  3222.     cmp.l    #ZmuSiC0,(a1)
  3223.     bne    @f
  3224.     addq.w    #8,a1
  3225. @@:
  3226.     Z_MUSIC    #ZM_PLAY_ZMD
  3227.     tst.l    d0
  3228.     bne    error
  3229.     bra    ok_0
  3230.  
  3231. zm_se_play:                *V3 ZMD効果音の演奏
  3232.     move.l    par1+val(sp),a1
  3233.     lea    dim1_data(a1),a1
  3234.     Z_MUSIC    #ZM_SE_PLAY
  3235.     tst.l    d0
  3236.     bne    error
  3237.     bra    ok_0
  3238.  
  3239. zm_se_adpcm1:                *V3 ADPCM効果音再生1
  3240.     move.l    par1+val(sp),d1
  3241.     lsl.w    #8,d1
  3242.     move.b    par2+val+3(sp),d1
  3243.     swap    d1
  3244.     move.l    par3+val(sp),d0
  3245.     lsl.w    #8,d0
  3246.     move.b    par4+val+3(sp),d0
  3247.     move.w    d0,d1            *d1=type,vol,frq,pan
  3248.     move.l    par5+val(sp),d2        *d2=size
  3249.     move.w    par6+val(sp),d4
  3250.     swap    d4
  3251.     move.w    par7+val+2(sp),d4    *d4=priority_ch
  3252.     move.l    par8+val(sp),a1
  3253.     lea    dim1_data(a1),a1
  3254.     Z_MUSIC    #ZM_SE_ADPCM1
  3255.     tst.l    d0
  3256.     bne    error
  3257.     bra    ok_0
  3258.  
  3259. zm_se_adpcm2:                *V3 ADPCM効果音再生2
  3260.     move.l    par1+val(sp),d1
  3261.     lsl.w    #8,d1
  3262.     move.b    par2+val+3(sp),d1
  3263.     swap    d1
  3264.     move.l    par3+val(sp),d0
  3265.     lsl.w    #8,d0
  3266.     move.b    par4+val+3(sp),d0
  3267.     move.w    d0,d1            *d1=type,vol,frq,pan
  3268.     move.l    par5+val(sp),d2        *d2=size
  3269.     move.w    par6+val(sp),d4
  3270.     swap    d4
  3271.     move.w    par7+val+2(sp),d4    *d4=priority_ch
  3272.     Z_MUSIC    #ZM_SE_ADPCM2
  3273.     tst.l    d0
  3274.     bne    error
  3275.     bra    ok_0
  3276.  
  3277. zm_intercept_play:            *V3 演奏開始制御の遮断制御
  3278.     move.l    par1+val(sp),d1
  3279.     Z_MUSIC    #ZM_INTERCEPT_PLAY
  3280.     bra    ok_0
  3281.  
  3282. zm_current_midi_in:            *V3 カレントMIDI-IN端子の設定
  3283.     move.l    par1+val(sp),d1
  3284.     Z_MUSIC    #ZM_CURRENT_MIDI_IN
  3285.     bra    ok_ret            *>d0.l=以前のカレントMIDI-OUTのポート番号(0-2)
  3286.  
  3287. zm_current_midi_out:            *V3 カレントMIDI-OUT端子の設定
  3288.     move.l    par1+val(sp),d1
  3289.     Z_MUSIC    #ZM_CURRENT_MIDI_OUT
  3290.     bra    ok_ret            *>d0.l=以前のカレントMIDI-INのポート番号(0-2)
  3291.  
  3292. zm_midi_transmission:            *V3 MIDIデータメッセージの送信
  3293.     move.l    par1+val(sp),d1
  3294.     move.l    par2+val(sp),d2
  3295.     move.l    par3+val(sp),a1
  3296.     lea    dim1_data(a1),a1
  3297.     Z_MUSIC    #ZM_MIDI_TRANSMISSION
  3298.     bra    ok_ret            *>d0.l=送信データの8ビット加算合計値
  3299.  
  3300. zm_exclusive:                *V3 エクスクルーシブメッセージの送信
  3301.     move.l    par1+val(sp),d1
  3302.     move.l    par2+val(sp),d2
  3303.     move.l    par3+val(sp),d3
  3304.     move.l    par3+val(sp),a1
  3305.     lea    dim1_data(a1),a1
  3306.     Z_MUSIC    #ZM_EXCLUSIVE
  3307.     bra    ok_0
  3308.  
  3309. zm_set_eox_wait:            *V3 EOX送信後のウェイトを設定する
  3310.     move.l    par1+val(sp),d1
  3311.     move.l    par2+val(sp),d2
  3312.     Z_MUSIC    #ZM_SET_EOX_WAIT
  3313.     bra    ok_ret            *>d0.l=それまでのウェイト値
  3314.  
  3315. zm_midi_inp1:                *V3 MIDIデータの1バイト入力
  3316.     move.l    par1+val(sp),d1
  3317.     move.l    par2+val(sp),d2
  3318.     Z_MUSIC    #ZM_MIDI_INP1
  3319.     bra    ok_ret            *>d0.l=data
  3320.  
  3321. zm_midi_out1:                *V3 MIDIデータの1バイト出力
  3322.     move.l    par1+val(sp),d1
  3323.     move.l    par2+val(sp),d2
  3324.     Z_MUSIC    #ZM_MIDI_OUT1
  3325.     tst.l    d0
  3326.     bne    error
  3327.     bra    ok_0
  3328.  
  3329. zm_midi_rec:                *V3 MIDIデータのレコーディング開始
  3330.     move.l    par1+val(sp),d1
  3331.     Z_MUSIC    #ZM_MIDI_REC
  3332.     tst.l    d0
  3333.     bne    error
  3334.     bra    ok_0
  3335.  
  3336. zm_midi_rec_end:            *V3 MIDIデータのレコーディング終了
  3337.     move.l    par1+val(sp),d1
  3338.     Z_MUSIC    #ZM_MIDI_REC_END
  3339.     tst.l    d0
  3340.     bne    error
  3341.     bra    ok_0
  3342.  
  3343. zm_gs_reset:                *V3 GS音源の初期化
  3344.     move.l    par1+val(sp),d1
  3345.     move.l    par2+val(sp),d3
  3346.     Z_MUSIC    #ZM_GS_RESET
  3347.     tst.l    d0
  3348.     bne    error
  3349.     bra    ok_0
  3350.  
  3351. zm_gs_partial_reserve:            *V3 GS音源のパーシャルリザーブ
  3352.     move.l    par1+val(sp),d1
  3353.     move.l    par2+val(sp),d3
  3354.     move.l    par3+val(sp),a1
  3355.     cmpi.w    #16-1,dim1(a1)
  3356.     bne    mz_illegal_arry        *配列のサイズが違う
  3357.     lea    dim1_data(a1),a1
  3358.     Z_MUSIC    #ZM_GS_PARTIAL_RESERVE
  3359.     tst.l    d0
  3360.     bne    error
  3361.     bra    ok_0
  3362.  
  3363. zm_gs_reverb:                *V3 GS音源のリバーブ・パラメータの設定
  3364.     move.l    par1+val(sp),d1
  3365.     move.l    par2+val(sp),d2
  3366.     move.l    par3+val(sp),d3
  3367.     move.l    par4+val(sp),a1
  3368.     lea    dim1_data(a1),a1
  3369.     Z_MUSIC    #ZM_GS_REVERB
  3370.     tst.l    d0
  3371.     bne    error
  3372.     bra    ok_0
  3373.  
  3374. zm_gs_chorus:                *V3 GS音源のコーラス・パラメータの設定
  3375.     move.l    par1+val(sp),d1
  3376.     move.l    par2+val(sp),d2
  3377.     move.l    par3+val(sp),d3
  3378.     move.l    par4+val(sp),a1
  3379.     lea    dim1_data(a1),a1
  3380.     Z_MUSIC    #ZM_GS_CHORUS
  3381.     tst.l    d0
  3382.     bne    error
  3383.     bra    ok_0
  3384.  
  3385. zm_gs_part_parameter:            *V3 GS音源のパート・パラメータの設定
  3386.     move.l    par1+val(sp),d1
  3387.     move.l    par2+val(sp),d2
  3388.     move.l    par3+val(sp),d3
  3389.     move.l    par4+val(sp),a1
  3390.     lea    dim1_data(a1),a1
  3391.     Z_MUSIC    #ZM_GS_PART_PARAMETER
  3392.     tst.l    d0
  3393.     bne    error
  3394.     bra    ok_0
  3395.  
  3396. zm_gs_drum_setup:            *V3 GS音源のドラム・セットアップ設定
  3397.     move.l    par1+val(sp),d1
  3398.     move.l    par2+val(sp),d2
  3399.     move.l    par3+val(sp),d3
  3400.     move.l    par4+val(sp),a1
  3401.     lea    dim1_data(a1),a1
  3402.     Z_MUSIC    #ZM_GS_DRUM_SETUP
  3403.     tst.l    d0
  3404.     bne    error
  3405.     bra    ok_0
  3406.  
  3407. zm_gs_drum_name:            *V3 GS音源のドラム・セット名設定
  3408.     move.l    par1+val(sp),d1
  3409.     move.l    par2+val(sp),d2
  3410.     move.l    par3+val(sp),d3
  3411.     move.l    par4+val(sp),a1        *a1.l=文字列ポインタ
  3412.     Z_MUSIC    #ZM_GS_DRUM_NAME
  3413.     tst.l    d0
  3414.     bne    error
  3415.     bra    ok_0
  3416.  
  3417. zm_gs_print:                *V3 GS音源の画面へのメッセージ出力
  3418.     move.l    par1+val(sp),d1
  3419.     move.l    par2+val(sp),d2
  3420.     move.l    par3+val(sp),d3
  3421.     move.l    par4+val(sp),a1        *a1.l=文字列ポインタ
  3422.     Z_MUSIC    #ZM_GS_PRINT
  3423.     tst.l    d0
  3424.     bne    error
  3425.     bra    ok_0
  3426.  
  3427. zm_gs_display:                *V3 GS音源の画面へのドットパターン出力
  3428.     move.l    par1+val(sp),d1
  3429.     move.l    par2+val(sp),d2
  3430.     move.l    par3+val(sp),a1
  3431.     lea    dim1_data(a1),a1
  3432.     Z_MUSIC    #ZM_GS_DISPLAY
  3433.     tst.l    d0
  3434.     bne    error
  3435.     bra    ok_0
  3436.  
  3437. zm_gm_system_on:            *V3 GM音源のリセット
  3438.     move.l    par1+val(sp),d1
  3439.     Z_MUSIC    #ZM_GM_SYSTEM_ON
  3440.     tst.l    d0
  3441.     bne    error
  3442.     bra    ok_0
  3443.  
  3444. zm_sc88_mode_set:            *V3 SC88モード設定
  3445.     move.l    par1+val(sp),d1
  3446.     move.l    par2+val(sp),d3
  3447.     Z_MUSIC    #ZM_SC88_MODE_SET
  3448.     tst.l    d0
  3449.     bne    error
  3450.     bra    ok_0
  3451.  
  3452. zm_sc88_reverb:                *V3 SC88のリバーブ・パラメータの設定
  3453.     move.l    par1+val(sp),d1
  3454.     move.l    par2+val(sp),d2
  3455.     move.l    par3+val(sp),d3
  3456.     move.l    par4+val(sp),a1
  3457.     lea    dim1_data(a1),a1
  3458.     Z_MUSIC    #ZM_SC88_REVERB
  3459.     tst.l    d0
  3460.     bne    error
  3461.     bra    ok_0
  3462.  
  3463. zm_sc88_chorus:                *V3 SC88のコーラス・パラメータの設定
  3464.     move.l    par1+val(sp),d1
  3465.     move.l    par2+val(sp),d2
  3466.     move.l    par3+val(sp),d3
  3467.     move.l    par4+val(sp),a1
  3468.     lea    dim1_data(a1),a1
  3469.     Z_MUSIC    #ZM_SC88_CHORUS
  3470.     tst.l    d0
  3471.     bne    error
  3472.     bra    ok_0
  3473.  
  3474. zm_sc88_delay:                *V3 SC88のディレイ・パラメータの設定
  3475.     move.l    par1+val(sp),d1
  3476.     move.l    par2+val(sp),d2
  3477.     move.l    par3+val(sp),d3
  3478.     move.l    par4+val(sp),a1
  3479.     lea    dim1_data(a1),a1
  3480.     Z_MUSIC    #ZM_SC88_DELAY
  3481.     tst.l    d0
  3482.     bne    error
  3483.     bra    ok_0
  3484.  
  3485. zm_sc88_equalizer:            *V3 SC88のイコライザ・パラメータの設定
  3486.     move.l    par1+val(sp),d1
  3487.     move.l    par2+val(sp),d2
  3488.     move.l    par3+val(sp),d3
  3489.     move.l    par4+val(sp),a1
  3490.     lea    dim1_data(a1),a1
  3491.     Z_MUSIC    #ZM_SC88_EQUALIZER
  3492.     tst.l    d0
  3493.     bne    error
  3494.     bra    ok_0
  3495.  
  3496. zm_sc88_part_parameter:            *V3 SC88のパート・パラメータの設定
  3497.     move.l    par1+val(sp),d1
  3498.     move.l    par2+val(sp),d2
  3499.     move.l    par3+val(sp),d3
  3500.     move.l    par4+val(sp),a1
  3501.     lea    dim1_data(a1),a1
  3502.     Z_MUSIC    #ZM_SC88_PART_PARAMETER
  3503.     tst.l    d0
  3504.     bne    error
  3505.     bra    ok_0
  3506.  
  3507. zm_sc88_drum_setup:            *V3 SC88のドラム・セットアップ設定
  3508.     move.l    par1+val(sp),d1
  3509.     move.l    par2+val(sp),d2
  3510.     move.l    par3+val(sp),d3
  3511.     move.l    par4+val(sp),a1
  3512.     lea    dim1_data(a1),a1
  3513.     Z_MUSIC    #ZM_SC88_DRUM_SETUP
  3514.     tst.l    d0
  3515.     bne    error
  3516.     bra    ok_0
  3517.  
  3518. zm_sc88_drum_name:            *V3 SC88のドラム・セット名設定
  3519.     move.l    par1+val(sp),d1
  3520.     move.l    par2+val(sp),d2
  3521.     move.l    par3+val(sp),d3
  3522.     move.l    par4+val(sp),a1        *a1.l=文字列ポインタ
  3523.     Z_MUSIC    #ZM_SC88_DRUM_NAME
  3524.     tst.l    d0
  3525.     bne    error
  3526.     bra    ok_0
  3527.  
  3528. zm_sc88_user_inst:            *V3 SC88のユーザー音色の設定
  3529.     move.l    par1+val(sp),d1
  3530.     move.l    par2+val(sp),d2
  3531.     move.l    par3+val(sp),d3
  3532.     move.l    par4+val(sp),a1
  3533.     lea    dim1_data(a1),a1
  3534.     Z_MUSIC    #ZM_SC88_USER_INST
  3535.     tst.l    d0
  3536.     bne    error
  3537.     bra    ok_0
  3538.  
  3539. zm_sc88_user_drum:            *V3 SC88のユーザードラムセットの設定
  3540.     move.l    par1+val(sp),d1
  3541.     move.l    par2+val(sp),d2
  3542.     move.l    par3+val(sp),d3
  3543.     move.l    par4+val(sp),a1
  3544.     lea    dim1_data(a1),a1
  3545.     Z_MUSIC    #ZM_SC88_USER_DRUM
  3546.     tst.l    d0
  3547.     bne    error
  3548.     bra    ok_0
  3549.  
  3550. zm_mt32_reset:                *V3 MT32の初期化
  3551.     move.l    par1+val(sp),d1
  3552.     move.l    par2+val(sp),d3
  3553.     Z_MUSIC    #ZM_MT32_RESET
  3554.     tst.l    d0
  3555.     bne    error
  3556.     bra    ok_0
  3557.  
  3558. zm_mt32_partial_reserve:        *V3 MT32のパーシャルリザーブ
  3559.     move.l    par1+val(sp),d1
  3560.     move.l    par2+val(sp),d3
  3561.     move.l    par3+val(sp),a1
  3562.     lea    dim1_data(a1),a1
  3563.     Z_MUSIC    #ZM_MT32_PARTIAL_RESERVE
  3564.     tst.l    d0
  3565.     bne    error
  3566.     bra    ok_0
  3567.  
  3568. zm_mt32_reverb:                *V3 MT32のリバーブパラメータの設定
  3569.     move.l    par1+val(sp),d1
  3570.     move.l    par2+val(sp),d2
  3571.     move.l    par3+val(sp),d3
  3572.     move.l    par4+val(sp),a1
  3573.     lea    dim1_data(a1),a1
  3574.     Z_MUSIC    #ZM_MT32_REVERB
  3575.     tst.l    d0
  3576.     bne    error
  3577.     bra    ok_0
  3578.  
  3579. zm_mt32_part_setup:            *V3 MT32のパート・パラメータの設定
  3580.     move.l    par1+val(sp),d1
  3581.     move.l    par2+val(sp),d2
  3582.     move.l    par3+val(sp),d3
  3583.     move.l    par4+val(sp),a1
  3584.     lea    dim1_data(a1),a1
  3585.     Z_MUSIC    #ZM_MT32_PART_SETUP
  3586.     tst.l    d0
  3587.     bne    error
  3588.     bra    ok_0
  3589.  
  3590. zm_mt32_drum:                *V3 MT32のドラム・セットアップ設定
  3591.     move.l    par1+val(sp),d1
  3592.     move.l    par2+val(sp),d2
  3593.     move.l    par3+val(sp),d3
  3594.     move.l    par4+val(sp),a1
  3595.     lea    dim1_data(a1),a1
  3596.     Z_MUSIC    #ZM_MT32_DRUM
  3597.     tst.l    d0
  3598.     bne    error
  3599.     bra    ok_0
  3600.  
  3601. zm_mt32_common:                *V3 MT32のコモン・パラメータの設定
  3602.     move.l    par1+val(sp),d1
  3603.     move.l    par2+val(sp),d2
  3604.     move.l    par3+val(sp),d3
  3605.     move.l    par4+val(sp),a1
  3606.     lea    dim1_data(a1),a1
  3607.     Z_MUSIC    #ZM_MT32_COMMON
  3608.     tst.l    d0
  3609.     bne    error
  3610.     bra    ok_0
  3611.  
  3612. zm_mt32_partial:            *V3 MT32のパーシャル・パラメータ設定
  3613.     move.l    par1+val(sp),d1
  3614.     move.l    par2+val(sp),d2
  3615.     move.l    par3+val(sp),d3
  3616.     move.l    par4+val(sp),a1
  3617.     lea    dim1_data(a1),a1
  3618.     Z_MUSIC    #ZM_MT32_PARTIAL
  3619.     tst.l    d0
  3620.     bne    error
  3621.     bra    ok_0
  3622.  
  3623. zm_mt32_patch:                *V3 MT32のパッチ・パラメータ設定
  3624.     move.l    par1+val(sp),d1
  3625.     move.l    par2+val(sp),d2
  3626.     move.l    par3+val(sp),d3
  3627.     move.l    par4+val(sp),a1
  3628.     lea    dim1_data(a1),a1
  3629.     Z_MUSIC    #ZM_MT32_PATCH
  3630.     tst.l    d0
  3631.     bne    error
  3632.     bra    ok_0
  3633.  
  3634. zm_mt32_print:                *V3 MT32の画面へのメッセージ出力
  3635.     move.l    par1+val(sp),d1
  3636.     move.l    par2+val(sp),d2
  3637.     move.l    par3+val(sp),d3
  3638.     move.l    par4+val(sp),a1
  3639.     Z_MUSIC    #ZM_MT32_PRINT
  3640.     tst.l    d0
  3641.     bne    error
  3642.     bra    ok_0
  3643.  
  3644. zm_u220_setup:                *V3 U220のセットアップ・パラメータの設定
  3645.     move.l    par1+val(sp),d1
  3646.     move.l    par2+val(sp),d3
  3647.     move.l    par3+val(sp),a1
  3648.     lea    dim1_data(a1),a1
  3649.     Z_MUSIC    #ZM_U220_SETUP
  3650.     tst.l    d0
  3651.     bne    error
  3652.     bra    ok_0
  3653.  
  3654. zm_u220_part_setup:            *V3 U220の(テンポラリパッチ)パートセットアップ・パラメータの設定
  3655.     move.l    par1+val(sp),d1
  3656.     move.l    par2+val(sp),d3
  3657.     move.l    par3+val(sp),a1
  3658.     lea    dim1_data(a1),a1
  3659.     Z_MUSIC    #ZM_U220_PART_SETUP
  3660.     tst.l    d0
  3661.     bne    error
  3662.     bra    ok_0
  3663.  
  3664. zm_u220_common:                *V3 U220の(テンポラリパッチ)コモン・パラメータの設定
  3665.     move.l    par1+val(sp),d1
  3666.     move.l    par2+val(sp),d3
  3667.     move.l    par3+val(sp),a1
  3668.     lea    dim1_data(a1),a1
  3669.     Z_MUSIC    #ZM_U220_COMMON
  3670.     tst.l    d0
  3671.     bne    error
  3672.     bra    ok_0
  3673.  
  3674. zm_u220_timbre:                *V3 U220のティンバー・パラメータの設定
  3675.     move.l    par1+val(sp),d1
  3676.     move.l    par2+val(sp),d3
  3677.     move.l    par3+val(sp),a1
  3678.     lea    dim1_data(a1),a1
  3679.     Z_MUSIC    #ZM_U220_TIMBRE
  3680.     tst.l    d0
  3681.     bne    error
  3682.     bra    ok_0
  3683.  
  3684. zm_u220_drums_setup:            *V3 U220の(テンポラリパッチ)パッチ・ドラム・セットアップ設定
  3685.     move.l    par1+val(sp),d1
  3686.     move.l    par2+val(sp),d3
  3687.     move.l    par3+val(sp),a1
  3688.     lea    dim1_data(a1),a1
  3689.     Z_MUSIC    #ZM_U220_DRUM_SETUP
  3690.     tst.l    d0
  3691.     bne    error
  3692.     bra    ok_0
  3693.  
  3694. zm_u220_drums_inst:            *V3 U220の(テンポラリパッチ)ドラム音色設定
  3695.     move.l    par1+val(sp),d1
  3696.     move.l    par2+val(sp),d3
  3697.     move.l    par3+val(sp),a1
  3698.     lea    dim1_data(a1),a1
  3699.     Z_MUSIC    #ZM_U220_DRUM_INST
  3700.     tst.l    d0
  3701.     bne    error
  3702.     bra    ok_0
  3703.  
  3704. zm_u220_print:                *V3 U220の画面へのメッセージ出力
  3705.     move.l    par1+val(sp),d1
  3706.     move.l    par2+val(sp),d2
  3707.     move.l    par3+val(sp),d3
  3708.     move.l    par4+val(sp),a1
  3709.     Z_MUSIC    #ZM_U220_PRINT
  3710.     tst.l    d0
  3711.     bne    error
  3712.     bra    ok_0
  3713.  
  3714. zm_m1_setup:                *V3 M1のSEQ-SONG0のMIDIチャンネルの設定
  3715.     move.l    par1+val(sp),a1
  3716.     lea    dim1_data(a1),a1
  3717.     Z_MUSIC    #ZM_M1_SETUP
  3718.     tst.l    d0
  3719.     bne    error
  3720.     bra    ok_0
  3721.  
  3722. zm_m1_part_setup:            *V3 M1のSEQ-SONG0のトラックパラメータの設定
  3723.     move.l    par1+val(sp),a1
  3724.     lea    dim1_data(a1),a1
  3725.     Z_MUSIC    #ZM_M1_PART_SETUP
  3726.     tst.l    d0
  3727.     bne    error
  3728.     bra    ok_0
  3729.  
  3730. zm_m1_effect_setup:            *V3 M1のSEQ-SONG0のエフェクトパラメータの設定
  3731.     move.l    par1+val(sp),a1
  3732.     lea    dim1_data(a1),a1
  3733.     Z_MUSIC    #ZM_M1_EFFECT_SETUP
  3734.     tst.l    d0
  3735.     bne    error
  3736.     bra    ok_0
  3737.  
  3738. zm_m1_print:                *V3 M1のSEQ-SONG0のタイトル設定
  3739.     move.l    par1+val(sp),d2
  3740.     move.l    par2+val(sp),a1
  3741.     Z_MUSIC    #ZM_M1_PRINT
  3742.     tst.l    d0
  3743.     bne    error
  3744.     bra    ok_0
  3745.  
  3746. zm_send_to_m1:                *V3 M1へパラメータを送信する
  3747.     move.l    par1+val(sp),d1
  3748.     move.l    par2+val(sp),d3
  3749.     Z_MUSIC    #ZM_SEND_TO_M1
  3750.     tst.l    d0
  3751.     bne    error
  3752.     bra    ok_0
  3753.  
  3754. zm_pcm_read:                *V3 PCMファイルの登録
  3755.     moveq.l    #0,d1
  3756.     move.w    par1+val+2(sp),d1
  3757.     tst.b    par2+val+3(sp)
  3758.     bpl    @f
  3759.     bset.l    #31,d1        *加工有りマーク
  3760. @@:
  3761.     moveq.l    #0,d2
  3762.     move.b    par3+val+3(sp),d2    *登録タイプ
  3763.     lsl.w    #8,d2
  3764.     move.b    par4+val+3(sp),d2    オリジナルキー
  3765.     swap    d2
  3766.     Z_MUSIC    #ZM_PCM_READ
  3767.     move.l    a0,d0
  3768.     bne    ok_ret
  3769.     bra    error        *a0.l=0はエラー
  3770.  
  3771. zm_pcm_erase:                *V3 PCMファイルの登録取消
  3772.     move.l    par1+val(sp),d1
  3773.     suba.l    a1,a1            *erase mode
  3774.     Z_MUSIC    #ZM_PCM_READ
  3775.     tst.l    d0
  3776.     bne    error
  3777.     bra    ok_0
  3778.  
  3779. zm_register_zpd:            *V3 ZPDの登録
  3780.     move.l    par1+val(sp),a1        *filename
  3781.     Z_MUSIC    #ZM_REGISTER_ZPD
  3782.     tst.l    d0
  3783.     bne    error
  3784.     bra    ok_0
  3785.  
  3786. zm_set_zpd_table:            *V3 ZPDテーブルの登録
  3787.     move.l    par1+val(sp),d1
  3788.     move.l    par2+val(sp),a1
  3789.     lea    dim1_data(a1),a1
  3790.     Z_MUSIC    #ZM_SET_ZPD_TABLE
  3791.     tst.l    d0
  3792.     bne    error
  3793.     bra    ok_0
  3794.  
  3795. zm_exec_subfile:            *V3 サブファイルの読み込みと実行
  3796.     move.l    par1+val(sp),a1        *filename
  3797.     Z_MUSIC    #ZM_EXEC_SUBFILE
  3798.     tst.l    d0
  3799.     bne    error
  3800.     bra    ok_0
  3801.  
  3802. zm_transmit_midi_dump:            *V3 MIDIデータファイルの転送
  3803.     move.l    par1+val(sp),d1        *port number
  3804.     move.l    par2+val(sp),a1        *filename
  3805.     Z_MUSIC    #ZM_TRANSMIT_MIDI_DUMP
  3806.     tst.l    d0
  3807.     bne    error
  3808.     bra    ok_0
  3809.  
  3810. zm_set_wave_form1:            *V3 波形メモリの登録1
  3811.     move.l    par1+val(sp),d1        *wave number
  3812.     move.l    par2+val(sp),a1        *data buffer
  3813.     lea    dim1_data(a1),a1
  3814.     Z_MUSIC    #ZM_SET_WAVE_FORM1
  3815.     tst.l    d0
  3816.     bne    error
  3817.     bra    ok_0
  3818.  
  3819. zm_set_wave_form2:            *V3 波形メモリの登録2
  3820.     move.l    par1+val(sp),d1        *wave number
  3821.     move.l    par2+val(sp),a1        *data buffer
  3822.     lea    dim1_data(a1),a1
  3823.     Z_MUSIC    #ZM_SET_WAVE_FORM2
  3824.     tst.l    d0
  3825.     bne    error
  3826.     bra    ok_0
  3827.  
  3828. zm_obtain_events:            *V3 各種イベントの取得
  3829.     move.l    par1+val(sp),d1        *omt
  3830.     move.l    par2+val(sp),a1        *data buffer
  3831.     lea    dim1_data(a1),a1
  3832.     Z_MUSIC    #ZM_OBTAIN_EVENTS
  3833.     move.l    a0,d0
  3834.     beq    error
  3835.     bra    ok_ret
  3836.  
  3837. zm_loop_control:            *V3 現在の演奏のループ回数を取得する
  3838.     move.l    par1+val(sp),d1
  3839.     Z_MUSIC    #ZM_LOOP_CONTROL
  3840.     cmpi.l    #-1,d0
  3841.     beq    error            *-1はエラー
  3842.     bra    ok_ret
  3843.  
  3844. zm_mask_tracks:                *V3 トラックマスク
  3845.     move.l    par1+val(sp),a1        *buffer
  3846.     lea    dim1_data(a1),a1
  3847.     Z_MUSIC    #ZM_MASK_TRACKS
  3848.     move.l    a0,d0
  3849.     beq    error
  3850.     bra    ok_ret
  3851.  
  3852. zm_mask_all_tracks:            *V3 全トラックマスク
  3853.     move.l    par1+val(sp),d1
  3854.     suba.l    a1,a1
  3855.     Z_MUSIC    #ZM_MASK_TRACKS
  3856.     tst.l    d0
  3857.     bne    error
  3858.     bra    ok_0
  3859.  
  3860. zm_solo_track:                *V3 ソロトラック演奏
  3861.     move.l    par1+val(sp),d1
  3862.     lea    1.w,a1
  3863.     Z_MUSIC    #ZM_MASK_TRACKS
  3864.     tst.l    d0
  3865.     bne    error
  3866.     bra    ok_0
  3867.  
  3868. zm_mask_channels:            *V3 チャンネルマスク
  3869.     move.l    par1+val(sp),a1
  3870.     lea    dim1_data(a1),a1
  3871.     Z_MUSIC    #ZM_MASK_CHANNELS
  3872.     tst.l    d0
  3873.     bne    error
  3874.     bra    ok_0
  3875.  
  3876. zm_mask_all_channels:            *V3 全チャンネルマスク
  3877.     move.l    par1+val(sp),d1
  3878.     suba.l    a1,a1
  3879.     Z_MUSIC    #ZM_MASK_CHANNELS
  3880.     tst.l    d0
  3881.     bne    error
  3882.     bra    ok_0
  3883.  
  3884. zm_solo_channel:            *V3 ソロチャンネル演奏
  3885.     move.l    par1+val(sp),d1
  3886.     lea    1.w,a1
  3887.     Z_MUSIC    #ZM_MASK_CHANNELS
  3888.     tst.l    d0
  3889.     bne    error
  3890.     bra    ok_0
  3891.  
  3892. zm_set_ch_output_level:            *V3 各チャンネルの出力レベルの設定
  3893.     move.l    par1+val(sp),a1
  3894.     lea    dim1_data(a1),a1
  3895.     Z_MUSIC    #ZM_SET_CH_OUTPUT_LEVEL
  3896.     tst.l    d0
  3897.     bne    error
  3898.     bra    ok_0
  3899.  
  3900. zm_set_tr_output_level:            *V3 各トラックの出力レベルの設定
  3901.     move.l    par1+val(sp),a1
  3902.     lea    dim1_data(a1),a1
  3903.     Z_MUSIC    #ZM_SET_TR_OUTPUT_LEVEL
  3904.     tst.l    d0
  3905.     bne    error
  3906.     bra    ok_0
  3907.  
  3908. zm_master_fader:            *V3 マスターフェーダーの設定
  3909.     move.l    par1+val(sp),a1
  3910.     lea    dim1_data(a1),a1
  3911.     Z_MUSIC    #ZM_MASTER_FADER
  3912.     tst.l    d0
  3913.     bne    error
  3914.     bra    ok_0
  3915.  
  3916. zm_get_fader_status:            *V3 フェーダーの状態取得
  3917.     Z_MUSIC    #ZM_GET_FADER_STATUS
  3918.     bra    ok_ret
  3919.  
  3920. zm_get_play_time:            *V3 演奏時間の取得
  3921.     Z_MUSIC    #ZM_GET_PLAY_TIME
  3922.     bra    ok_ret
  3923.  
  3924. zm_get_1st_comment:            *V3 演奏中の曲のコメントを取り出す
  3925.     Z_MUSIC    #ZM_GET_1ST_COMMENT
  3926.     move.l    a0,d0
  3927.     bra    ok_ret
  3928.  
  3929. zm_get_timer_mode:            *V3 現在のテンポソースとなっているタイマの種類を返す
  3930.     Z_MUSIC    #ZM_GET_TIMER_MODE
  3931.     bra    ok_ret
  3932.  
  3933. zm_get_track_table:            *V3 演奏トラックテーブルのアドレスを得る
  3934.     Z_MUSIC    #ZM_GET_TRACK_TABLE
  3935.     move.l    a0,d0
  3936.     bra    ok_ret
  3937.  
  3938. zm_get_track_table_se:            *V3 効果音演奏トラックテーブルのアドレスを得る
  3939.     Z_MUSIC    #ZM_GET_TRACK_TABLE
  3940.     move.l    a0,d0
  3941.     bra    ok_ret
  3942.  
  3943. zm_get_play_work:            *V3 演奏トラックワークのアドレスを得る
  3944.     move.l    par1+val(sp),d1
  3945.     Z_MUSIC    #ZM_GET_PLAY_WORK
  3946.     move.l    a0,d0
  3947.     bra    ok_ret
  3948.  
  3949. zm_get_play_work_se:            *V3 効果音演奏トラックワークのアドレスを得る
  3950.     move.l    par1+val(sp),d1
  3951.     Z_MUSIC    #ZM_GET_PLAY_WORK
  3952.     bra    ok_ret
  3953.  
  3954. zm_get_buffer_information:        *V3 バッファ・アドレステーブルのアドレス
  3955.     Z_MUSIC    #ZM_GET_BUFFER_INFORMATION
  3956.     move.l    a0,d0
  3957.     bra    ok_ret
  3958.  
  3959. zm_zmsc_status:                *V3 ZMUSICの状態ワークのアドレス
  3960.     Z_MUSIC    #ZM_GET_ZMSC_STATUS
  3961.     move.l    a0,d0
  3962.     bra    ok_ret
  3963.  
  3964. zm_calc_total:                *V3 ZMDの演奏時間やトータルステップタイムなどの計算
  3965.     move.l    par1+val(sp),a1        *a1=zmd addr
  3966.     lea    dim1_data(a1),a1
  3967.     move.l    par2+val(sp),a2        *a2=result ptr
  3968.     Z_MUSIC    #ZM_CALC_TOTAL
  3969.     move.l    a0,(a2)            *エラーリストのアドレスを格納してやる
  3970.     bra    ok_ret
  3971.  
  3972. zm_occupy_zmusic:            *V3 ZMUSICの占有
  3973.     move.l    par1+val(sp),d1
  3974.     Z_MUSIC    #ZM_OCCUPY_ZMUSIC
  3975.     bra    ok_ret
  3976.  
  3977. zm_occupy_compiler:            *V3 コンパイラの占有
  3978.     move.l    par1+val(sp),d1
  3979.     Z_MUSIC    #ZM_OCCUPY_COMPILER
  3980.     bra    ok_ret
  3981.  
  3982. zm_store_error:                *V3 エラーコードのストア
  3983.     move.l    par1+val(sp),d1
  3984.     move.l    par2+val(sp),d2
  3985.     move.l    par3+val(sp),a1        *pointer
  3986.     Z_MUSIC    #ZM_STORE_ERROR
  3987.     move.l    a0,(a1)
  3988.     bra    ok_ret
  3989.  
  3990. zm_print_error:                *V3 エラーメッセージの表示
  3991.     move.w    par1+val+2(sp),d1
  3992.     swap    d1
  3993.     move.w    par2+val+2(sp),d1
  3994.     move.l    par3+val(sp),d2
  3995.     move.l    par4+val(sp),a1        *STR-ZMD
  3996.     tst.b    (a1)
  3997.     bne    @f
  3998.     suba.l    a1,a1            *no ZMD name
  3999. @@:
  4000.     move.l    par5+val(sp),a2        *srcaddr
  4001.     lea    dim1_data(a2),a2
  4002.     tst.b    (a2)
  4003.     bne    @f
  4004.     suba.l    a2,a2
  4005. @@:
  4006.     move.l    par6+val(sp),a3        *STR-srcname
  4007.     tst.b    (a3)
  4008.     bne    @f
  4009.     suba.l    a3,a3            *no srcname
  4010. @@:
  4011.     move.l    par7+val(sp),a5        *err tbl addr
  4012.     move.l    par8+val(sp),a4        *出力バッファアドレス格納配列
  4013.     Z_MUSIC    #ZM_PRINT_ERROR        *a4=**buff
  4014.     move.l    a0,(a4)
  4015.     bra    ok_ret
  4016.  
  4017. zm_get_mem:                *V3 メモリの確保
  4018.     move.l    par1+val(sp),d2
  4019.     move.l    par2+val(sp),d3
  4020.     Z_MUSIC    #ZM_GET_MEM
  4021.     move.l    a0,d0
  4022.     bra    ok_ret
  4023.  
  4024. zm_enlarge_mem:                *V3 メモリブロックのサイズの変更
  4025.     move.l    par1+val(sp),d2
  4026.     move.l    par2+val(sp),a1
  4027.     Z_MUSIC    #ZM_ENLARGE_MEM
  4028.     move.l    a0,d0
  4029.     bra    ok_ret
  4030.  
  4031. zm_free_mem:                *V3 メモリブロックの解放
  4032.     move.l    par1+val(sp),a1
  4033.     Z_MUSIC    #ZM_FREE_MEM
  4034.     bra    ok_ret
  4035.  
  4036. zm_free_mem2:                *V3 特定の用途IDを持ったメモリブロックの解放
  4037.     move.l    par1+val(sp),d3
  4038.     Z_MUSIC    #ZM_FREE_MEM2
  4039.     bra    ok_ret
  4040.  
  4041. zm_exchange_memid:            *V3 メモリブロックの用途IDの変更
  4042.     move.l    par1+val(sp),d1
  4043.     move.l    par2+val(sp),d2
  4044.     move.l    par3+val(sp),d3
  4045.     move.l    par4+val(sp),a1
  4046.     Z_MUSIC    #ZM_EXCHANGE_MEMID
  4047.     bra    ok_ret
  4048.  
  4049. zm_init_all:                *V3 ZMUSICの全初期化を行う
  4050.     Z_MUSIC    #ZM_INIT_ALL
  4051.     bra    ok_ret
  4052.  
  4053. zm_int_start:                *V3 割り込み開始制御
  4054.     move.l    par1+val(sp),d1
  4055.     Z_MUSIC    #ZM_INT_START
  4056.     bra    ok_0
  4057.  
  4058. zm_int_stop:                *V3 割り込み停止制御
  4059.     move.l    par1+val(sp),d1
  4060.     Z_MUSIC    #ZM_INT_STOP
  4061.     bra    ok_0
  4062.  
  4063. zm_control_tempo:            *V3 テンポ設定の主導権設定
  4064.     move.l    par1+val(sp),d1
  4065.     Z_MUSIC    #ZM_CONTROL_TEMPO
  4066.     tst.l    d0
  4067.     bne    error
  4068.     bra    ok_0
  4069.  
  4070. zm_convert_pcm:                *V3 PCMデータの変換を行う
  4071.     move.l    par1+val(sp),d1
  4072.     move.l    par2+val(sp),d2
  4073.     move.l    par3+val(sp),a1
  4074.     lea    dim1_data(a1),a1
  4075.     move.l    par4+val(sp),a2
  4076.     lea    dim1_data(a2),a2
  4077.     Z_MUSIC    #ZM_CONVERT_PCM
  4078.     bra    ok_ret
  4079.  
  4080. fnc_end:
  4081.  
  4082. wrt_str:                *文字データのバッファへの書き込み
  4083.     * < a0=source str pointer
  4084.     * - all
  4085.     movem.l    d0/a0,-(sp)
  4086. @@:
  4087.     move.b    (a0)+,d0
  4088.     beq    @f
  4089.     bsr    do_wrt_zms_b
  4090.     bra    @b
  4091. @@:
  4092.     movem.l    (sp)+,d0/a0
  4093.     rts
  4094.  
  4095. wrt_trks:            *チャンネル番号を書く
  4096.     * < a0.l=sp
  4097. reglist    reg    d0-d4/a0
  4098.     movem.l    reglist,-(sp)
  4099.     moveq.l    #0,d1
  4100.     moveq.l    #0,d2
  4101.     moveq.l    #10-1,d3    *basicのパラメータマックスが10個のため
  4102.     moveq.l    #0,d4        *reset marker
  4103.     bra    @f
  4104. chs_lp:
  4105.     moveq    #',',d0
  4106.     bsr    do_wrt_zms_b
  4107. @@:
  4108.     tst.w    par1(a0,d1.w)    *省略?
  4109.     bmi    next_chs
  4110.     move.l    par1+val(a0,d1.w),d0    *get trk number
  4111.     st.b    d4        *mark
  4112.     bsr    wrt_num
  4113.     add.w    #next_par,d1        *次へ
  4114.     dbra    d3,chs_lp
  4115.     movem.l    (sp)+,reglist
  4116.     rts
  4117. next_chs:
  4118.     add.w    #next_par,d1        *次へ
  4119.     dbra    d3,@b
  4120.     movem.l    (sp)+,reglist
  4121.     rts
  4122.  
  4123. self_output:                *ZMSへ出力
  4124.     * < d3=size
  4125.     * < a5=data address
  4126.     move.w    #%0_000_01,-(sp)
  4127.     pea    ZMS(pc)
  4128.     DOS    _OPEN
  4129.     addq.w    #6,sp
  4130.     move.l    d0,d5        *d5.w=file handle
  4131.  
  4132.     move.l    d3,-(sp)    *size
  4133.     pea    (a5)        *data address
  4134.     move.w    d5,-(sp)
  4135.     DOS    _WRITE
  4136.     lea    10(sp),sp
  4137.  
  4138.     move.w    d5,-(sp)
  4139.     DOS    _CLOSE
  4140.     addq.w    #2,sp
  4141.     rts
  4142.  
  4143. read:
  4144.     * < d5.l=file handle
  4145.     * > a5=data address
  4146.     * > d3.l=size
  4147.     * X d0
  4148.     move.w    #2,-(sp)        *ファィルの長さを調べる
  4149.     clr.l    -(sp)
  4150.     move.w    d5,-(sp)
  4151.     DOS    _SEEK
  4152.      addq.w    #8,sp            *d0.l=file length
  4153.     move.l    d0,d3            *d3=length
  4154.     bne    @f
  4155.     addq.w    #4,sp
  4156.     bra    mz_illegal_filesize    *file size=0
  4157. @@:
  4158.     move.l    d0,-(sp)
  4159.     move.w    #2,-(sp)
  4160.     DOS    _MALLOC2
  4161.     addq.w    #6,sp
  4162.     tst.l    d0
  4163.     bpl    @f
  4164.     addq.w    #4,sp
  4165.     bra    mz_out_of_memory    *OUT OF MEMORY
  4166. @@:
  4167.     move.l    d0,a5
  4168.  
  4169.     clr.w    -(sp)        *ファイルポインタを元に戻す
  4170.     clr.l    -(sp)
  4171.     move.w    d5,-(sp)
  4172.     DOS    _SEEK
  4173.     addq.w    #8,sp
  4174.  
  4175.     move.l    d3,-(sp)    *push size
  4176.     pea    (a5)        *push addr
  4177.     move.w    d5,-(sp)    *file handle
  4178.     DOS    _READ
  4179.     lea    10(sp),sp
  4180.     cmp.l    d0,d3
  4181.     bne    @f
  4182.     addq.w    #4,sp
  4183.     bra    mz_read_error        *読み込み失敗
  4184. @@:
  4185.     move.w    d5,-(sp)    *close
  4186.     DOS    _CLOSE
  4187.     addq.l    #2,sp
  4188.     rts
  4189.  
  4190. do_wrt_zms_l:
  4191.     rol.l    #8,d0
  4192.     bsr    do_wrt_zms_b
  4193.     rol.l    #8,d0
  4194.     bsr    do_wrt_zms_b
  4195.     rol.l    #8,d0
  4196.     bsr    do_wrt_zms_b
  4197.     rol.l    #8,d0
  4198.     bra    do_wrt_zms_b
  4199.  
  4200. do_wrt_zms_w:
  4201.     rol.w    #8,d0
  4202.     bsr    do_wrt_zms_b
  4203.     rol.w    #8,d0
  4204.  
  4205. do_wrt_zms_b:
  4206. reglist    reg    d0-d3/a0-a2
  4207.     tst.l    zms_buffer_addr-work(a6)
  4208.     beq    error_dwzb
  4209.     movem.l    reglist,-(sp)
  4210.     move.l    zms_buffer_addr(pc),a1
  4211.     move.l    zms_buffer_ptr(pc),d1
  4212.     move.b    d0,(a1,d1.l)
  4213.     addq.l    #1,d1
  4214.     move.l    d1,zms_buffer_ptr-work(a6)
  4215.     move.l    zms_buffer_size(pc),d2
  4216.     cmp.l    d2,d1                *バッファのサイズチェック
  4217.     bne    1f                *まだ不足していない
  4218.     addq.l    #3,d2
  4219.     andi.w    #$fffc,d2            *Make it long word border
  4220.     move.l    d2,d3                *後で使う
  4221.     add.l    #zms_buffer_default_size,d2    *大きく取り直す
  4222.     move.l    d2,zms_buffer_size-work(a6)    *new size
  4223.     move.l    d2,-(sp)
  4224.     pea    (a1)
  4225.     DOS    _SETBLOCK
  4226.     addq.w    #8,sp
  4227.     tst.l    d0
  4228.     beq    1f        *no error
  4229.     move.l    d2,-(sp)    *SETBLOCK出来ない時は新たにメモリ確保
  4230.     DOS    _MALLOC
  4231.     addq.w    #4,sp
  4232.     tst.l    d0
  4233.     bmi    err_exit_enlmm    *error
  4234.     move.l    d0,a0
  4235.     move.l    d0,a2
  4236.     pea    (a1)
  4237. @@:                *旧メモリ内容を新メモリエリアへ複写
  4238.     move.l    (a1)+,(a2)+
  4239.     subq.l    #4,d3
  4240.     bne    @b
  4241.     DOS    _MFREE        *元のメモリ開放
  4242.     addq.w    #4,sp
  4243.     move.l    a0,zms_buffer_addr-work(a6)    *new addr
  4244. 1:
  4245.     movem.l    (sp)+,reglist
  4246.     rts
  4247. err_exit_enlmm:            *error
  4248.     movem.l    (sp)+,reglist
  4249.     addq.w    #4,sp        *=rts
  4250.     bra    mz_out_of_memory
  4251. error_dwzb:
  4252.     addq.w    #4,sp
  4253.     bra    mz_v2_command_error
  4254.  
  4255. chk_kanji:
  4256.     tst.b    d0
  4257.     bpl    @f        *normal characters
  4258.     cmpi.b    #$a0,d0        *漢字か
  4259.     bcs    cknj_yes
  4260.     cmpi.b    #$df,d0
  4261.     bls    @f
  4262. cknj_yes:
  4263.     move.w    #CCR_NEGA,ccr    *yes
  4264.     rts
  4265. @@:
  4266.     move.w    #CCR_ZERO,ccr    *no
  4267.     rts
  4268.  
  4269. wrt_num:            *d0の値を文字数列に変換しバッファへ書き込む
  4270.     * < d0.l=value
  4271.     * - all
  4272. reglist    reg    d1-d5/a1
  4273.     movem.l    reglist,-(sp)
  4274.     moveq.l    #0,d4
  4275.     move.l    d0,d5
  4276.     lea    exp_tbl(pc),a1
  4277.     moveq.l    #10-1,d1
  4278. ex_loop0:
  4279.     moveq.l    #0,d2
  4280.     move.l    (a1)+,d3
  4281. ex_loop1:
  4282.     or    d3,d3        *clr carry
  4283.     sub.l    d3,d5
  4284.     bcs    xbcd_str
  4285.     addq.b    #1,d2
  4286.     bra    ex_loop1
  4287. xbcd_str:
  4288.     add.l    d3,d5
  4289.     tst.b    d2
  4290.     bne    nml_ktset
  4291.     tst.b    d4
  4292.     beq    nml_lp_ope
  4293. nml_ktset:
  4294.     st    d4
  4295.     add.b    #'0',d2
  4296.     move.l    d2,d0
  4297.     bsr    do_wrt_zms_b
  4298. nml_lp_ope:
  4299.     dbra    d1,ex_loop0
  4300.     tst.l    d4
  4301.     bne    set_suji_end
  4302.     moveq    #'0',d0
  4303.     bsr    do_wrt_zms_b
  4304. set_suji_end:
  4305.     movem.l    (sp)+,reglist
  4306.     rts
  4307.  
  4308. wrt_num2:            *d0の値を文字数列に変換しバッファへ書き込む
  4309.     * < d0.l=value        *3桁固定
  4310.     * - all
  4311. reglist    reg    d1-d5/a1
  4312.     movem.l    reglist,-(sp)
  4313.     moveq    #0,d4
  4314.     move.l    d0,d5
  4315.     lea    exp_tbl+28(pc),a1
  4316.     moveq.l    #3-1,d1
  4317. _ex_loop0:
  4318.     moveq.l    #0,d2
  4319.     move.l    (a1)+,d3
  4320. _ex_loop1:
  4321.     or    d3,d3        *clr carry
  4322.     sub.l    d3,d5
  4323.     bcs    _xbcd_str
  4324.     addq.b    #1,d2
  4325.     bra    _ex_loop1
  4326. _xbcd_str:
  4327.     add.l    d3,d5
  4328.     tst.b    d2
  4329.     bne    _nml_ktset
  4330.     tst.b    d4
  4331.     bne    _nml_ktset
  4332.     moveq    #' ',d0
  4333.     bsr    do_wrt_zms_b
  4334.     bra    _nml_lp_ope
  4335. _nml_ktset:
  4336.     st    d4
  4337.     add.b    #'0',d2
  4338.     move.l    d2,d0
  4339.     bsr    do_wrt_zms_b
  4340. _nml_lp_ope:
  4341.     dbra    d1,_ex_loop0
  4342.     tst.b    d4
  4343.     bne    _set_suji_end
  4344.     moveq    #'0',d0
  4345.     bsr    do_wrt_zms_b
  4346. _set_suji_end:
  4347.     movem.l    (sp)+,reglist
  4348.     rts
  4349.  
  4350. wrt_num3:            *16進数文字列(2bytes)で書き込み
  4351.     * < d0=data value
  4352.     * - all
  4353.     movem.l    d0-d2,-(sp)
  4354.     move.l    d0,d2
  4355.     moveq    #'$',d0
  4356.     bsr    do_wrt_zms_b
  4357.     move.b    d2,d1
  4358.     lsr.b    #4,d1
  4359.     add.b    #$30,d1
  4360.     cmpi.b    #'9',d1
  4361.     bls    its_hex8
  4362.     addq.b    #7,d1
  4363. its_hex8:
  4364.     move.b    d1,d0
  4365.     bsr    do_wrt_zms_b
  4366.  
  4367.     andi.b    #$0f,d2
  4368.     add.b    #$30,d2
  4369.     cmpi.b    #'9',d2
  4370.     bls    its_hex8_
  4371.     addq.b    #7,d2
  4372. its_hex8_:
  4373.     move.l    d2,d0
  4374.     bsr    do_wrt_zms_b
  4375.     movem.l    (sp)+,d0-d2
  4376.     rts
  4377.  
  4378. mk_capital:            *小文字→大文字(英字以外の場合はそのままthrough out)
  4379.     * < d0.b=letter chr
  4380.     cmpi.b    #'a',d0
  4381.     bcs    exit_mkcptl
  4382.     cmpi.b    #'z',d0
  4383.     bhi    exit_mkcptl
  4384.     andi.w    #$df,d0        *わざと.w
  4385. exit_mkcptl:
  4386.     rts
  4387.  
  4388. check_zm3:            *ZMUSIC/MUSICZ.FNC状態チェック
  4389.     lea    work(pc),a6
  4390.     tst.b    zm3_flg-work(a6)
  4391.     beq    1f
  4392.     rts
  4393. 1:
  4394.     addq.w    #4,sp
  4395.     bra    mz_no_zmusic_error
  4396.  
  4397. compile_zms:                *コンパイル
  4398. reglist    reg    d1-d3/a0-a1
  4399.     tst.b    compiler_flg-work(a6)
  4400.     bne    @f
  4401.     addq.w    #4,sp
  4402.     bra    mz_no_compiler_error    *コンパイラが常駐していない
  4403. @@:
  4404.     movem.l    reglist,-(sp)
  4405.     move.w    #$0d0a,d0
  4406.     bsr    do_wrt_zms_w
  4407.     moveq.l    #0,d3
  4408.     tst.b    detect_mode
  4409.     beq    1f
  4410.     move.l    #ID_ZMD,d3        *全ZMDを解放
  4411.     Z_MUSIC    #ZM_FREE_MEM2
  4412.     move.l    zms_buffer_addr(pc),a1
  4413.     move.l    zms_buffer_ptr(pc),d2
  4414.     move.l    #ZMC_ERL+1,d1
  4415.     Z_MUSIC    #ZM_COMPILER
  4416.     move.l    d0,d3            *n of err
  4417.     move.l    (a0),d2
  4418.     move.l    a0,a1            *>a0.l=エラーテーブル/結果テーブルの解放
  4419.     Z_MUSIC    #ZM_FREE_MEM        *エラーテーブル/結果テーブルの解放
  4420.     move.l    d2,d0            *d0.l=error
  4421.     andi.l    #$ffff,d0
  4422. 1:
  4423.     tst.l    d3            *check n of err
  4424.     movem.l    (sp)+,reglist
  4425.     bne    get_ermstj
  4426.     rts
  4427.  
  4428. go_play:                    *演奏またはZMSファイル出力
  4429. reglist    reg    d0-d3/d5/a0-a1
  4430.     movem.l    reglist,-(sp)
  4431.     move.l    #ID_ZMD,d3        *全ZMDを解放
  4432.     Z_MUSIC    #ZM_FREE_MEM2
  4433.     move.l    zms_buffer_addr(pc),a1
  4434.     move.l    zms_buffer_ptr(pc),d2
  4435.     move.l    #ZMC_ERL+1,d1
  4436.     Z_MUSIC    #ZM_COMPILER
  4437.     move.l    a0,zmd_addr-work(a6)
  4438.     beq    error_go_play        *エラーが発生している
  4439.     move.l    d0,n_of_err-work(a6)    *n of err
  4440.     bne    error_go_play        *エラーが発生している
  4441.  
  4442.     tst.b    out_flg-work(a6)        *ファイル出力か演奏か
  4443.     beq    @f
  4444.  
  4445.     move.l    zmd_addr(pc),a1
  4446.     Z_MUSIC    #ZM_CALC_TOTAL
  4447.     move.l    a0,a1            *>a0.l=エラーテーブル/結果テーブルの解放
  4448.     Z_MUSIC    #ZM_FREE_MEM        *エラーテーブル/結果テーブルの解放
  4449.  
  4450.     move.w    #32,-(sp)
  4451.     pea    gene_fn(pc)
  4452.     DOS    _CREATE
  4453.     addq.w    #6,sp
  4454.     move.l    d0,d5                *d5.w=file handle
  4455.     bmi    error_go_play
  4456.  
  4457.     move.l    zms_buffer_ptr(pc),d2
  4458.     move.l    d2,-(sp)            *data size
  4459.     move.l    zms_buffer_addr(pc),-(sp)    *data addr
  4460.     move.w    d5,-(sp)
  4461.     DOS    _WRITE
  4462.     lea    10(sp),sp
  4463.     cmp.l    d2,d0
  4464.     bne    error_go_play
  4465.  
  4466.     move.w    d5,-(sp)
  4467.     DOS    _CLOSE
  4468.     addq.w    #2,sp
  4469.     bra    1f
  4470. @@:
  4471.     moveq.l    #0,d2            *dummy size
  4472.     move.l    zmd_addr(pc),a1
  4473.     addq.w    #8,a1            *skip header
  4474.     Z_MUSIC    #ZM_PLAY_ZMD
  4475.     tst.l    d0
  4476.     bne    error_go_play
  4477.  
  4478.     move.l    zmd_addr(pc),a1
  4479.     Z_MUSIC    #ZM_CALC_TOTAL
  4480.     move.l    a0,a1            *>a0.l=エラーテーブル/結果テーブルの解放
  4481.     Z_MUSIC    #ZM_FREE_MEM        *エラーテーブル/結果テーブルの解放
  4482. 1:
  4483.     moveq.l    #0,d0            *no error mark
  4484.     movem.l    (sp)+,reglist
  4485.     rts
  4486.  
  4487. error_go_play:
  4488.     moveq.l    #-1,d0
  4489.     movem.l    (sp)+,reglist
  4490.     rts
  4491.  
  4492. ok_0:                    *戻り値無しでリータン
  4493.     moveq.l    #0,d0
  4494.     lea    ret_buf(pc),a0
  4495.     move.l    d0,6(a0)        *戻り値書き込み(low long word)
  4496.     rts
  4497.  
  4498. ok_ret:                    *戻り値有りでリータン
  4499.     lea    ret_buf(pc),a0
  4500.     move.l    d0,6(a0)        *戻り値書き込み(low long word)
  4501.     moveq.l    #0,d0
  4502.     rts
  4503.  
  4504. error:                    *エラー発生時の処理
  4505.     tst.b    zm3_flg-work(a6)
  4506.     beq    mz_no_zmusic_error    *ZMUSICがない
  4507.     move.l    zmd_addr(pc),a0        *コンパイル時に発生したエラーのテーブル
  4508.     lea    mz_compile_error_mes(pc),a1
  4509.     tst.l    n_of_err-work(a6)
  4510.     bne    @f
  4511.     moveq.l    #-1,d1
  4512.     Z_MUSIC    #ZM_STORE_ERROR        *> d0.l=n of err,a0.l=error tbl
  4513.     lea    mz_unknown_error_mes(pc),a1
  4514.     tst.l    d0            *n of err
  4515.     beq    @f            *エラーなし
  4516.     move.l    (a0),d1
  4517.     move.l    a0,a1
  4518.     Z_MUSIC    #ZM_FREE_MEM
  4519.     andi.l    #$ffff,d1        *エラー番号だけほしい
  4520.     add.w    d1,d1
  4521.     move.w    err_mes_tbl_j(pc,d1.w),d0
  4522.     lea    err_mes_tbl_j(pc,d0.w),a1    *a1.l=エラーメッセージ
  4523. @@:
  4524.     moveq.l    #1,d0            *error mark
  4525.     rts
  4526.  
  4527. get_ermstj:                    *compile_error
  4528.     addq.w    #4,sp
  4529.     tst.b    zm3_flg-work(a6)
  4530.     beq    mz_no_zmusic_error    *ZMUSICがない
  4531.     add.w    d0,d0
  4532.     move.w    err_mes_tbl_j(pc,d0.w),d0
  4533.     lea    err_mes_tbl_j(pc,d0.w),a1    *a1.l=エラーメッセージ
  4534.     moveq.l    #1,d0            *error mark
  4535.     rts
  4536.  
  4537.     .include    zmerrmes.s
  4538.  
  4539. mz_v2_command_error:
  4540.     lea    mz_v2_command_error_mes(pc),a1
  4541.     bra    @f
  4542. mz_illegal_arry:
  4543.     lea    mz_illegal_arry_mes(pc),a1
  4544.     bra    @f
  4545. mz_no_zmusic_error:
  4546.     lea    mz_no_zmusic_error_mes(pc),a1
  4547.     bra    @f
  4548. mz_no_compiler_error:
  4549.     lea    mz_no_compiler_error_mes(pc),a1
  4550.     bra    @f
  4551. mz_illegal_parameter:
  4552.     lea    mz_illegal_parameter_mes(pc),a1
  4553.     bra    @f
  4554. mz_illegal_fader_speed:
  4555.     lea    mz_illegal_fader_speed_mes(pc),a1
  4556.     bra    @f
  4557. mz_nul_string_error:
  4558.     lea    mz_nul_string_error_mes(pc),a1
  4559.     bra    @f
  4560. mz_file_open_error:
  4561.     lea    mz_file_open_error_mes(pc),a1
  4562.     bra    @f
  4563. mz_illegal_track_number:
  4564.     lea    mz_illegal_track_number_mes(pc),a1
  4565.     bra    @f
  4566. mz_too_many_tracks:
  4567.     lea    mz_too_many_tracks_mes(pc),a1
  4568.     bra    @f
  4569. mz_buffer_too_small:
  4570.     lea    mz_buffer_too_small_mes(pc),a1
  4571.     bra    @f
  4572. mz_illegal_filesize:
  4573.     lea    mz_illegal_filesize_mes(pc),a1
  4574.     bra    @f
  4575. mz_out_of_memory:
  4576.     lea    mz_out_of_memory_mes(pc),a1
  4577.     bra    @f
  4578. mz_read_error:
  4579.     lea    mz_read_error_mes(pc),a1
  4580. @@:
  4581.     moveq.l    #1,d0            *error mark
  4582.     rts
  4583.  
  4584.     if    (debug.and.1)
  4585. debug2:                    *デバグ用ルーチン(レジスタ値を表示/割り込み対応)
  4586.     movem.l    d0-d7/a0-a7,db_work
  4587.     clr.l    -(sp)
  4588.     DOS    _SUPER
  4589.     addq.w    #4,sp
  4590.     move.l    d0,-(sp)
  4591.  
  4592.     move.w    sr,db_work2        *save sr    (サブルーチン_get_hex32が必要)
  4593.     ori.w    #$700,sr        *mask int
  4594.  
  4595.     moveq.l    #%0011,d1
  4596.     IOCS    _B_COLOR
  4597.  
  4598.     lea    str__(pc),a1
  4599.  
  4600.     move.w    #$0d0a,(a1)+
  4601.     move.w    #$0d0a,(a1)+    *!
  4602.     move.w    #$0d0a,(a1)+    *!
  4603.  
  4604.     moveq.l    #8-1,d7
  4605.     lea    db_work(pc),a6
  4606. dbg2_lp01:
  4607.     move.l    (a6)+,d0
  4608.     bsr    _get_hex32
  4609.     addq.w    #8,a1
  4610.     cmpi.b    #4,d7
  4611.     bne    @f
  4612.     move.b    #' ',(a1)+
  4613. @@:
  4614.     move.b    #' ',(a1)+
  4615.     dbra    d7,dbg2_lp01
  4616.  
  4617.     move.b    #$0d,(a1)+
  4618.     move.b    #$0a,(a1)+
  4619.  
  4620.     moveq.l    #8-1,d7
  4621. dbg2_lp02:
  4622.     move.l    (a6)+,d0
  4623.     bsr    _get_hex32
  4624.     addq.w    #8,a1
  4625.     cmpi.b    #4,d7
  4626.     bne    @f
  4627.     move.b    #' ',(a1)+
  4628. @@:
  4629.     move.b    #' ',(a1)+
  4630.     dbra    d7,dbg2_lp02
  4631.  
  4632.     move.l    (a7),d0
  4633.     bsr    _get_hex32
  4634.     addq.w    #8,a1
  4635. *    move.b    #$0d,(a1)+
  4636. *    move.b    #$0a,(a1)+
  4637.     clr.b    (a1)+
  4638.     lea    str__(pc),a1
  4639.     IOCS    _B_PRINT
  4640. *@@:
  4641. *    btst.b    #5,$806.w
  4642. *    bne    @b
  4643.  
  4644.     move.w    db_work2(pc),sr    *get back sr
  4645.     DOS    _SUPER
  4646.     addq.w    #4,sp
  4647.     movem.l    db_work(pc),d0-d7/a0-a7
  4648.     rts
  4649.  
  4650. _get_hex32:            *値→16進数文字列(4bytes)
  4651.     * < d0=data value
  4652.     * < a1=格納したいアドレス
  4653.     * > (a1)=ascii numbers
  4654.     * - all
  4655.     movem.l    d0-d1/d4/a1,-(sp)
  4656.     addq.w    #8,a1
  4657.     clr.b    (a1)
  4658.     moveq.l    #8-1,d4
  4659. _gh_lp32:
  4660.     move.b    d0,d1
  4661.     andi.b    #$0f,d1
  4662.     add.b    #$30,d1
  4663.     cmpi.b    #'9',d1
  4664.     bls    _its_hex32
  4665.     addq.b    #7,d1
  4666. _its_hex32:
  4667.     move.b    d1,-(a1)
  4668.     lsr.l    #4,d0
  4669.     dbra    d4,_gh_lp32
  4670.     movem.l    (sp)+,d0-d1/d4/a1
  4671.     rts
  4672.         *デバッグ用ワーク
  4673.     .even
  4674. str__:        ds.b    96*2
  4675. db_work:    dcb.l    16,0        *for debug
  4676. db_work2:    dc.l    0
  4677.         dc.b    'REGI'
  4678.     endif
  4679.  
  4680.     .data
  4681. work:
  4682. ZMS:        .dc.b    'ZMS',0
  4683. CRLF:        .dc.b    13,10,0
  4684. dflt_fn:    .dc.b    'ZMUSIC.ZMS',0
  4685. rem1:    dc.b    "/",9," AF  OM  WF  SY  SP PMD AMD PMS AMS PAN",13,10,0
  4686. rem2:    dc.b    "/",9," AR  DR  SR  RR  SL  OL  KS  ML DT1 DT2 AME",13,10,0
  4687. rem3:    dc.b    9,"/",9," AL  FB  OM PAN  WF  SY  SP PMD AMD PMS AMS",13,10,0
  4688. rem4:    dc.b    "/  WG ",9," PC  PF PKF PBS WFM PCM PLW PWVS",13,10,0
  4689. rem5:    dc.b    13,10,"/ P-ENV",9,"DPT VLS TMK TM1 TM2 TM3 TM4 LV0 LV1 LV2 STL EDL",13,10,0 
  4690. rem6:    dc.b    13,10,"/ P-LFO",9," RT DPT MDS",13,10,0
  4691. rem7:    dc.b    13,10,"/  TVF ",9,"CUT RES KYF BSP BSL",13,10,0
  4692. rem8:    dc.b    13,10,"/TVFENV",9,"DPT VLS DPT TMK TM1 TM2 TM3 TM4 TM5 LV1 LV2 LV3 STL",13,10,0
  4693. rem9:    dc.b    13,10,"/  TVA ",9,"LVL VLS BP1 BL1 BP2 BL2",13,10,0
  4694. rem10:    dc.b    13,10,"/TVAENV",9,"TMK TMV TM1 TM2 TM3 TM4 TM5 LV1 LV2 LV3 STL",13,10,0
  4695. rem11:    dc.b    "/",9,"TMD TMN TML VLS CHP EAR EDR ESL ERR",13,10,0
  4696. rem12:    dc.b    13,10,"/",9,"PSC PSF BRL BRU CHA PAS ABD ABR DTD",13,10,0
  4697. rem13:    dc.b    13,10,"/",9,"VRT WFM DPT DLY RST MDP CHA PAS",13,10,0
  4698. rem14:    dc.b    "/  Tr",0
  4699. rem15:    dc.b    "PRG VOL KTR DTN PAN",13,10,0
  4700. i_data:    dc.b    $1a
  4701. fmvset:        dc.b    '.FM_VSET ',0
  4702. midi_dump:    dc.b    '.MIDI_DUMP ',0
  4703. midi_data:    dc.b    '.MIDI_DATA {',0
  4704. exclusive:    dc.b    '.EXCLUSIVE {',0
  4705. roland:        dc.b    '.ROLAND_EXCLUSIVE ',0
  4706. adpcm_list:    dc.b    '.ADPCM_LIST ',0
  4707. sc55_vr_:    dc.b    '.SC55_V_RESERVE ',0
  4708. sc55_rvb_:    dc.b    '.SC55_REVERB ',0
  4709. sc55_cho_:    dc.b    '.SC55_CHORUS ',0
  4710. sc55_pst_:    dc.b    '.SC55_PART_SETUP ',0
  4711. sc55_dst_:    dc.b    '.SC55_DRUM_SETUP ',0
  4712. sc55_prt_:    dc.b    '.SC55_PRINT ',0
  4713. sc55_dsp_:    dc.b    '.SC55_DISPLAY ',0
  4714. adpcm_block_:    dc.b    '.ADPCM_BLOCK_DATA ',0
  4715. mt32_pr_:    dc.b    '.MT32_P_RESERVE ',0
  4716. mt32_rvb_:    dc.b    '.MT32_REVERB ',0
  4717. mt32_pst_:    dc.b    '.MT32_PART_SETUP ',0
  4718. mt32_dst_:    dc.b    '.MT32_DRUM_SETUP ',0
  4719. mt32_cmn_:    dc.b    '.MT32_COMMON ',0
  4720. mt32_ptch_:    dc.b    '.MT32_PATCH ',0
  4721. mt32_prtl_:    dc.b    '.MT32_PARTIAL ',0
  4722. mt32_prt_:    dc.b    '.MT32_PRINT ',0
  4723. u220_prt_:    dc.b    '.U220_PRINT ',0
  4724. m_prt_:        dc.b    '.PRINT ',0
  4725. u220_setup_:    dc.b    '.U220_SETUP ',0
  4726. u220_cmn_:    dc.b    '.U220_COMMON ',0
  4727. u220_dst_:    dc.b    '.U220_DRUM_SETUP ',0
  4728. u220_pst_:    dc.b    '.U220_PART_SETUP ',0
  4729. u220_tmb_:    dc.b    '.U220_TIMBRE ',0
  4730. u220_dis_:    dc.b    '.U220_DRUM_INST ',0
  4731. m1_mdch_:    dc.b    '.M1_MIDI_CH {',0
  4732. m1_ptst_:    dc.b    '.M1_PART_SETUP {',0
  4733. m1_efct_:    dc.b    '.M1_EFFECT_SETUP {',0
  4734. m1_prt_:    dc.b    '.M1_PRINT "',0
  4735. send_m1_:    dc.b    '.SEND_TO_M1 ',0
  4736. fm_mstr_:    dc.b    '.FM_MASTER_VOLUME ',0
  4737. wvfm_:        dc.b    '.WAVE_FORM ',0
  4738. sc55_init_:    dc.b    '.SC55_INIT ',0
  4739. mt32_init_:    dc.b    '.MT32_INIT ',0
  4740.     .even
  4741. ret_buf:    dc.w    0    *+0
  4742. ret_buf_h:    dc.l    0    *+2 hi
  4743. ret_buf_l:    dc.l    0    *+6 low
  4744. zmd_play_wk:    dc.l    0
  4745. zm_ver_buf:    dc.w    0    *ZMUSICバージョンバッファ
  4746. open_fn:    dc.l    open_fn_
  4747.  
  4748. exp_tbl:
  4749.     dc.l    1000000000    *0
  4750.     dc.l    100000000    *4
  4751.     dc.l    10000000    *8
  4752.     dc.l    1000000        *12
  4753.     dc.l    100000        *16
  4754.     dc.l    10000        *20
  4755.     dc.l    1000        *24
  4756.     dc.l    100        *28
  4757.     dc.l    10        *32
  4758.     dc.l    1        *36
  4759.  
  4760. mz_unknown_error_mes:        dc.b    '正体不明のエラーが発生しました',0
  4761. mz_compile_error_mes:        dc.b    'ZMUSICコンパイラでエラーが発生しました',0
  4762. mz_no_zmusic_error_mes:        dc.b    'ZMUSICバージョン3.0以上が常駐していません',0
  4763. mz_no_compiler_error_mes:    dc.b    'ZMUSICコンパイラが常駐していません',0
  4764. mz_illegal_arry_mes:        dc.b    '配列の型が規定外です',0
  4765. mz_illegal_parameter_mes:    dc.b    'パラメータの値が規定外です',0
  4766. mz_illegal_fader_speed_mes:    dc.b    'フェーダー移動速度が規定外です',0
  4767. mz_nul_string_error_mes:    dc.b    '文字列が異常です',0
  4768. mz_file_open_error_mes:        dc.b    'ファイルのオープンに失敗しました',0
  4769. mz_illegal_track_number_mes:    dc.b    'トラック番号が規定外です',0
  4770. mz_too_many_tracks_mes:        dc.b    'トラック番号が多すぎます',0
  4771. mz_buffer_too_small_mes:    dc.b    'バッファサイズが小さすぎます',0
  4772. mz_illegal_filesize_mes:    dc.b    'ファイルサイズが異常です',0
  4773. mz_out_of_memory_mes:        dc.b    'メモリが不足しています',0
  4774. mz_read_error_mes:        dc.b    'ファイルの読み込みに失敗しました',0
  4775. mz_v2_command_error_mes:    dc.b    'MUSICZ.FNC V1.00~2.00のコマンドの使い方が不正です',0
  4776.  
  4777. detect_mode:    dc.b    0    *compile mode
  4778.  
  4779. title:
  4780.     dc.b    'MUSICZ.FNC '
  4781.     dc.b    $F3,'V',$F3,'E',$F3,'R',$F3,'S',$F3,'I',$F3,'O',$F3,'N'
  4782.     version
  4783.     test
  4784.     dc.b    ' (C) 1991,96 '
  4785.     dc.b    'ZENJI SOFT',13,10,0
  4786.     .even
  4787. zm3_flg:        ds.b    1    *0:ZMUSICが常駐していない,1:常駐している
  4788. compiler_flg:        ds.b    1    *0:コンパイラが常駐していない,1:常駐している
  4789. out_flg:        ds.b    1    *0:generate mode off,1:on
  4790.     .even
  4791. zms_buffer_addr:    ds.l    1
  4792. zms_buffer_ptr:        ds.l    1
  4793. zms_buffer_size:    ds.l    1
  4794. n_of_err:        ds.l    1    *コンパイル時に発生したエラーの数
  4795. zmd_addr:        ds.l    1    *ZMDのアドレス/コンパイル時に発生したエラーのテーブル
  4796. fopen_name:        ds.l    1
  4797.     .bss
  4798. suji:            ds.b    20
  4799. filename:        ds.b    fn_size
  4800. gene_fn:        ds.b    fn_size
  4801. open_fn_:                *fopenワーク
  4802. fdr_cmd:                *m_fadeoutワーク
  4803. trk_cmd:                *m_stop,m_contワーク
  4804. pcm_cmd:        ds.b    1024    *m_pcmsetワーク
  4805.